首页 > 解决方案 > 使用 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哪里?我使用的版本boost1.65.1

我尝试的所有步骤都包含在 Dockerfile 中,链接如下:
https://github.com/i-am-neet/cc-ros/blob/master/Dockerfile

感谢您的耐心等待

标签: raspberry-pi3cross-compilingrosarm64

解决方案


推荐阅读