ARM64架构Jetson Nano上micro-ROS编译Arduino Due报错求助
一、修复“fork/exec /bin/arm-none-eabi-g++: no such file or directory”错误
该问题是因为替换的platform.txt硬编码了编译器路径,与你的实际环境不匹配。
恢复原platform.txt
找到Arduino Due核心的platform.txt文件(通常路径为~/arduino-1.8.19/hardware/arduino/sam/platform.txt),若未备份,可重新下载Arduino SAM核心包恢复该文件。定位编译器实际路径
运行命令查找arm-none-eabi-g++的真实位置:find ~/arduino-1.8.19 -name arm-none-eabi-g++示例输出:
/home/your_username/arduino-1.8.19/hardware/tools/arm/bin/arm-none-eabi-g++手动适配micro-ROS补丁
下载micro-ROS的platform补丁文件,对比原文件与补丁的差异,仅修改必要部分:- 保留原文件中
compiler.path的动态路径设置(通常为compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/),不要替换为硬编码的/bin/路径。 - 添加补丁中关于编译、链接选项的修改(比如补充
-lrcl、-lrcutils等micro-ROS依赖库的链接参数)。
- 保留原文件中
二、解决“undefined reference to 'rcl_publish'”错误
此链接错误说明micro-ROS核心库未被正确关联到项目中。
确认库版本兼容性
确保安装的micro-ROS Arduino库对应ROS2 Foxy版本,不同ROS2版本的micro-ROS库不兼容。检查代码规范
确保代码包含必要头文件并正确初始化rcl组件:#include <rcl/rcl.h> #include <std_msgs/msg/int32.h> rcl_node_t node; rcl_publisher_t publisher; std_msgs__msg__Int32 msg; void setup() { rcl_init(0, NULL, NULL); rcl_node_init_default(&node, "due_node", "", NULL); rcl_publisher_init_default(&publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "test_topic"); } void loop() { msg.data++; rcl_publish(&publisher, &msg, NULL); delay(1000); }验证库链接配置
在Arduino IDE中,确认项目已添加micro-ROS库(通过Sketch > Include Library > Manage Libraries安装),且platform.txt中已添加链接micro-ROS核心库的参数(如-lrcl、-lrcutils、-lrosidl_runtime_c等)。清理编译缓存
开启Arduino IDE的编译 verbose 输出(File > Preferences中勾选Show verbose output during: compilation),执行Sketch > Clean Up清理缓存后重新编译。
内容的提问来源于stack exchange,提问作者CW_LEE

