raspberry-pi3 - 使用 buildroot 为 aarch64 交叉编译 ROS Melodic 时,class_loader 失败
问题描述
我正在尝试使用 buildroot 创建的工具链在树莓派 3 上为 aarch64 交叉编译 ROS Melodic。
我按照文档http://wiki.ros.org/ROS/CrossCompiling/RaspberryPi/Cross-Compile%20ROS%20for%20the%20RaspberryPi,我尝试构建的 ROS 的来源来自:
rosinstall_generator ros_comm --rosdistro melodic --deps --tar > melodic-ros_comm.rosinstall
wstool init -j8 src melodic-ros_comm.rosinstall
我收到如下错误消息:
[100%] Linking CXX shared library /home/developer/ros_pi/ros_catkin_ws/devel_isolated/class_loader/lib/libclass_loader.so
/home/developer/buildroot-2020.02.1/output/host/lib/gcc/aarch64-buildroot-linux-gnu/8.4.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: /home/developer/buildroot-2020.02.1/output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libboost_thread.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
CMakeFiles/class_loader.dir/build.make:180: recipe for target '/home/developer/ros_pi/ros_catkin_ws/devel_isolated/class_loader/lib/libclass_loader.so' failed
make[2]: *** [/home/developer/ros_pi/ros_catkin_ws/devel_isolated/class_loader/lib/libclass_loader.so] Error 1
CMakeFiles/Makefile2:195: recipe for target 'CMakeFiles/class_loader.dir/all' failed
make[1]: *** [CMakeFiles/class_loader.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
<== Failed to process package 'class_loader':
Command '['/home/developer/ros_pi/ros_catkin_ws/install_isolated/env.sh', 'make', '-j8', '-l8']' returned non-zero exit status 2
Reproduce this error by running:
==> cd /home/developer/ros_pi/ros_catkin_ws/build_isolated/class_loader && /home/developer/ros_pi/ros_catkin_ws/install_isolated/env.sh make -j8 -l8
Command failed, exiting.
这是我的 toolchain.cmake:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_LIBRARY_ARCHITECTURE aarch64)
set( CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/home/developer/buildroot-2020.02.1/output/host/aarch64-buildroot-linux-gnu/sysroot/usr/include/")
set( CMAKE_C_COMPILER aarch64-linux-gcc)
set( CMAKE_CXX_COMPILER aarch64-linux-g++)
set(CMAKE_FIND_ROOT_PATH "/home/developer/buildroot-2020.02.1/output/host/aarch64-buildroot-linux-gnu/sysroot")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
include_directories(/home/developer/buildroot-2020.02.1/output/host/aarch64-buildroot-linux-gnu/sysroot/usr/include/)
我猜问题出在boost
哪里?我使用的版本boost
是1.65.1
我尝试的所有步骤都包含在 Dockerfile 中,链接如下:
https://github.com/i-am-neet/cc-ros/blob/master/Dockerfile
感谢您的耐心等待
解决方案
推荐阅读
- c# - DataTable.Columns.Remove() 的时间/空间复杂度是多少?
- python - No Module Found python (在IDE之外运行)
- javascript - 禁用按钮,直到所有表单字段都填写在 Formik
- haskell - 我的最长公共子序列 Haskell 函数有什么问题?
- oauth-2.0 - Google OAuth2 Java 代码每次都询问权限
- html - 如何测试视口元标记的效果?
- ruby-on-rails - Ruby on rails 无法在 Windows 10 上运行
- angular - 如何在没有标志的情况下使用 ngx-bootstrap angular 折叠
- html - 使用多种颜色更改悬停时的 svg 元素填充颜色
- java - 将 LinkedHashMap 添加到 JSON 对象内部的数组时出现问题