本文介绍Ubuntu部署ROS常见编译报错的解决方法。对编译步骤感兴趣可以查看上篇文章
硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(上)
文章适用于瑞芯微旗下RK3562、RK3566、RK3568、RK3576、RK3588等Arm64位芯片平台,各型号触觉智能均有配套核心板及开发板,实现了百分百全国产。
常见编译报错解决方法
-
编译主机内存不足
除了增加编译主机内存配置外,建议将可以开启交换空间,例如zram:
sudo -i su# modprobe zram# echo 12G > /sys/block/zram0/disksize# echo 6G > /sys/block/zram0/mem_limit# mkswap /dev/zram0# swapon /dev/zram0# free -htotal used free shared buff/cache availableMem: 14Gi 3.9Gi 5.5Gi 27Mi 5.4Gi 10GiSwap: 11Gi 2.7Gi 9.3Gi
-
执行时报`GLIBCXX_3.4.30' not found 错误
在主板端执行以上报错,是因为RK Linux SDK版本较多, 工具链版本一直在更新,因此需要使用Linux SDK编译Rootfs的交叉工具来编译ROS2。
root@rk3562-buildroot:/opt/ros-foxy# ros2 run demo_nodes_cpp talker/opt/ros-foxy/lib/demo_nodes_cpp/talker: /lib/libstdc++.so.6: version`GLIBCXX_3.4.30' not found (required by /opt/ros-foxy/lib/librclcpp.so)/opt/ros-foxy/lib/demo_nodes_cpp/talker: /lib/libstdc++.so.6: version`GLIBCXX_3.4.30' not found (required by /opt/ros-foxy/lib/libspdlog.so.1)
-
编译结果中出现x86_64动态库
ls /opt/ros/lib/python3.10/site-packages/rclpy/_rclpy_pybind11.cpython-310- x86_64-linux-gnu.so
pybind11在交叉编译的环境中, 确实是会有一些已知的问题。找到的python是HOST端的可执行文件,因此一系列参数也是根据HOST端生成,如:
PYTHON_MODULE_EXTENSION:INTERNAL=.cpython-310-x86_64-linux-gnu.so
在pybind11/tools/FindPythonLibsNew.cmake较新的代码中,建议若是Cross Compling,可在外部手动添加python的参数:
1. 修改src/ros2/pybind11_vendor中pybind11升级到v2.10.2。
2. 并在pybind11_verdor/CMakeLists.txt中设置以下2个参数,
指定具体的 PYTHON_MODULE_EXTENSION:
list(APPEND extra_cmake_args "-DPYBIND11_PYTHONLIBS_OVERWRITE=OFF")list(APPEND extra_cmake_args "-DPYTHON_MODULE_EXTENSION=.cpython-310-aarch64-linux-gnu.so")
3. 在cross-compile.mixin中,也声明:
- "-DPYBIND11_PYTHONLIBS_OVERWRITE=OFF"- "-DPYTHON_MODULE_EXTENSION=.cpython-310-aarch64-linux-gnu.so"
上述修改后, 仍然发现rclpy在编译时,其CMakeCache.txt文件中得到的
PYTHON_MODULE_EXTENSION仍指向"x86_64",但第二次再编译时,会被修改成预期的aarch64。有以下原因:
1. 在pybind11/tools/pybind11NewTools.cmake中, 若未设置过
PYBIND11_PYTHON_EXECUTABLE_LAST、或它值被修改了,会直接清空PYTHON_MODULE_EXTENSION。
76 if(NOT ${_Python}_EXECUTABLE STREQUAL PYBIND11_PYTHON_EXECUTABLE_LAST)77 # Detect changes to the Python version/binary in subsequent CMake runs,and refresh config if needed78 unset(PYTHON_IS_DEBUG CACHE)79 unset(PYTHON_MODULE_EXTENSION CACHE)80 set(PYBIND11_PYTHON_EXECUTABLE_LAST81 "${${_Python}_EXECUTABLE}"82 CACHE INTERNAL "Python executable during the last CMake run")83 endif()
2. 在pybind11 issue #236 也有类似的现象。
3. 修改pybind11解决: 若是
PYBIND11_PYTHONLIBS_OVERWRITE="OFF",则不重设上述参数:
commit f7f1f2a927dd785d109833e411325de4c248719f (HEAD -> v2.10.2-fix)Author: cross-build for rk-l

2300

被折叠的 条评论
为什么被折叠?



