micro-ROS / micro_ros_platformio

micro-ROS library for Platform.IO
Apache License 2.0
205 stars 75 forks source link

Micro-ros undefined references #67

Closed thechosenone98 closed 1 year ago

thechosenone98 commented 1 year ago

I am trying to build micro_ros_platformio for a Teensy4.1 but I get a lot of warnings from "ar" at the end of the build but no fatal error. Here is a picture of those warning.

CleanShot 2022-10-03 at 19 18 00@2x

Further in the build of the code itself (the code that depends on micro_ros), it fails due to a bunch of undefined references that correspond with the file that are mentionned by the "ar" command.

Steps to reproduce the issue

Expected behavior

Build without errors (it compiles without all the aforementioned warnings on another machine running Ubuntu)

Actual behavior

Throws some warnings and complains later in the build that there are undefined references

Additional information

If it compiles without the warning, there will be an error at the end relating to the random library but this is due to other unrelated stuff.

pablogs9 commented 1 year ago

The build system for micro-ROS in Platform.io does not work properly in macOS or Windows, it is designed for Linux.

AFAIK you are able to build it with an Ubuntu machine. Sorry for the inconvenience, if you manage to solve these issues and support macOS we are open to PRs.

Thanks!

usaotearoa commented 1 year ago

I'm facing a very similar issue, despite being on Ubuntu 22.04.1. Here are the details: Ubuntu 22.04.1 with ROS2 Humble install (desktop) Visual Studio Code Version: 1.71.2 PlatformIO Core 6.1.4·Home 3.4.3 Hardware Platform Teensy 4.1 and micro_ROS (platformio)

While attempting to port source code from the following to work on teensy in platformio I have encounter the below compiler issues. Porting from: Mirco_ROS_Arduino - micro-ros_addtwoints_service to Teensy 4.1 with serial communication:

The source code:

//#include <micro_ros_arduino.h>
#include <Arduino.h>
#include <micro_ros_platformio.h>
#include <example_interfaces/srv/add_two_ints.h>
#include <stdio.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <std_msgs/msg/int64.h>

rcl_node_t node;
rclc_support_t support;
rcl_allocator_t allocator;
rclc_executor_t executor;

rcl_service_t service;
rcl_wait_set_t wait_set;

example_interfaces__srv__AddTwoInts_Response res;
example_interfaces__srv__AddTwoInts_Request req;

#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){while(1){};}}
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}

void service_callback(const void * req, void * res){
  example_interfaces__srv__AddTwoInts_Request * req_in = (example_interfaces__srv__AddTwoInts_Request *) req;
  example_interfaces__srv__AddTwoInts_Response * res_in = (example_interfaces__srv__AddTwoInts_Response *) res;

  //printf("Service request value: %d + %d.\n", (int) req_in->a, (int) req_in->b);

  res_in->sum = req_in->a + req_in->b;
}

void setup() {
  //set_microros_transports();
  Serial.begin(115200);
  set_microros_serial_transports(Serial);
  delay(1000); 

  allocator = rcl_get_default_allocator();

  // create init_options
  RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));

  // create node
  RCCHECK(rclc_node_init_default(&node, "add_twoints_client_rclc", "", &support));

  // create service
  RCCHECK(rclc_service_init_default(&service, &node, ROSIDL_GET_SRV_TYPE_SUPPORT(example_interfaces, srv, AddTwoInts), "/addtwoints"));

  // create executor
  RCCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator));
  RCCHECK(rclc_executor_add_service(&executor, &service, &req, &res, service_callback));
}

void loop() {
  delay(100);
  RCSOFTCHECK(rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)));
}

And this is the compiler output below. Yes I have followed the proper setup in platformio.ini which can be seen below the source code. And the step to compile are from the documentation. Also outlined below.

Compiler output:

administrator@dev01:~/Documents/gitclones/AutoBot_uros$ pio run
Processing teensy41 (platform: teensy; board: teensy41; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/teensy/teensy41.html
PLATFORM: Teensy (4.17.0) > Teensy 4.1
HARDWARE: IMXRT1062 600MHz, 512KB RAM, 7.75MB Flash
DEBUG: Current (jlink) External (jlink)
PACKAGES: 
 - framework-arduinoteensy @ 1.157.220801 (1.57) 
 - tool-teensy @ 1.157.0 (1.57) 
 - toolchain-gccarmnoneeabi @ 1.50401.190816 (5.4.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Installing pyyaml with pip at PlatformIO environment
/usr/bin/python3 -m pip install pyyaml
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (5.4.1)
Installing markupsafe==2.0.1 with pip at PlatformIO environment
/usr/bin/python3 -m pip install markupsafe==2.0.1
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: markupsafe==2.0.1 in /usr/lib/python3/dist-packages (2.0.1)
Configuring teensy41 with transport serial
micro-ROS already built
Found 93 compatible libraries
Scanning dependencies...
Dependency Graph
|-- micro_ros_platformio @ 0.0.1+sha.22cf9b6
Building in release mode
Compiling .pio/build/teensy41/src/main.cpp.o
Compiling .pio/build/teensy41/lib419/micro_ros_platformio/platform_code/arduino/clock_gettime.cpp.o
Compiling .pio/build/teensy41/lib419/micro_ros_platformio/platform_code/arduino/serial/micro_ros_transport.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/AudioStream.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/CrashReport.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/DMAChannel.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/EventResponder.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial1.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial3.cpp.o
Archiving .pio/build/teensy41/lib419/libmicro_ros_platformio.a
Indexing .pio/build/teensy41/lib419/libmicro_ros_platformio.a
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial4.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial5.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial6.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial7.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/HardwareSerial8.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/IntervalTimer.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/Print.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/Time.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/WString.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/analog.c.o
Compiling .pio/build/teensy41/FrameworkArduino/bootdata.c.o
Compiling .pio/build/teensy41/FrameworkArduino/clockspeed.c.o
Compiling .pio/build/teensy41/FrameworkArduino/debugprintf.c.o
Compiling .pio/build/teensy41/FrameworkArduino/delay.c.o
Compiling .pio/build/teensy41/FrameworkArduino/digital.c.o
Compiling .pio/build/teensy41/FrameworkArduino/eeprom.c.o
Compiling .pio/build/teensy41/FrameworkArduino/extmem.c.o
Compiling .pio/build/teensy41/FrameworkArduino/fuse.c.o
Compiling .pio/build/teensy41/FrameworkArduino/interrupt.c.o
Compiling .pio/build/teensy41/FrameworkArduino/keylayouts.c.o
Compiling .pio/build/teensy41/FrameworkArduino/main.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/memcpy-armv7m.S.o
Compiling .pio/build/teensy41/FrameworkArduino/memset.S.o
Compiling .pio/build/teensy41/FrameworkArduino/new.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/nonstd.c.o
Compiling .pio/build/teensy41/FrameworkArduino/pwm.c.o
Compiling .pio/build/teensy41/FrameworkArduino/rtc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent1.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent2.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent3.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent4.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent5.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent6.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent7.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEvent8.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEventUSB1.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/serialEventUSB2.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_alloc_valid.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_calloc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_free.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_hash.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_malloc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_malloc_stats.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_pool.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_realloc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_realloc_i.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_realloc_move.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_szalloc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_util.c.o
Compiling .pio/build/teensy41/FrameworkArduino/sm_zalloc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/startup.c.o
Compiling .pio/build/teensy41/FrameworkArduino/tempmon.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_audio.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_desc.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_flightsim.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_inst.cpp.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_joystick.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_keyboard.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_midi.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_mouse.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_mtp.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_rawhid.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_seremu.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_serial.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_serial2.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_serial3.c.o
Compiling .pio/build/teensy41/FrameworkArduino/usb_touch.c.o
Compiling .pio/build/teensy41/FrameworkArduino/yield.cpp.o
Archiving .pio/build/teensy41/libFrameworkArduino.a
Indexing .pio/build/teensy41/libFrameworkArduino.a
Linking .pio/build/teensy41/firmware.elf
.pio/build/teensy41/src/main.cpp.o: In function `setup':
main.cpp:(.text.setup+0x9a): undefined reference to `rosidl_typesupport_c__get_service_type_support_handle__example_interfaces__srv__AddTwoInts'
collect2: error: ld returned 1 exit status
*** [.pio/build/teensy41/firmware.elf] Error 1
================================================================================ [FAILED] Took 5.24 seconds ================================================================================

And my platformio.ini file:```

[env:teensy41] platform = teensy board = teensy41 framework = arduino board_microros_transport = serial

lib_deps = https://github.com/micro-ROS/micro_ros_platformio


And the workflow as per the manual:

pio lib install # Install dependencies pio run # Build the firmware pio run --target upload # Flash the firmware

Acuadros95 commented 1 year ago

Closing as macOS is not supported.

@usaotearoa Open a new issue if you still need help.

jkaflik commented 1 year ago

Sorry to see this issue was closed unresolved. I submitted a PR that fixes issues on MacOS: https://github.com/micro-ROS/micro_ros_platformio/pull/116

pablogs9 commented 1 year ago

Thanks @jkaflik, I'm taking a look at your PR