Ubuntu 交叉编译ROS Melodic on RaspberryPi 3B+;问题

Ubuntu 交叉编译ROS Melodic on RaspberryPi 3B+;问题,ubuntu,cmake,raspberry-pi,ros,catkin,Ubuntu,Cmake,Raspberry Pi,Ros,Catkin,在做了一些研究之后,我发现没有一种“行之有效的”交叉编译树莓型ROS的方法。我能想到的最好办法是从目标设备下载/usr、/lib和/opt,下载到我的开发机器上(安装在$HOME/Projects/TargetResources),制作一个CMake工具链文件,并调用catkin\u make\u insolated-DCMAKE\u toolschain\u file=…。虽然构建过程开始了,但我立即遇到了一个错误: $ catkin_make_isolated -DCMAKE_TOOLCHA

在做了一些研究之后,我发现没有一种“行之有效的”交叉编译树莓型ROS的方法。我能想到的最好办法是从目标设备下载
/usr
/lib
/opt
,下载到我的开发机器上(安装在
$HOME/Projects/TargetResources
),制作一个CMake工具链文件,并调用
catkin\u make\u insolated-DCMAKE\u toolschain\u file=…
。虽然构建过程开始了,但我立即遇到了一个错误:

$ catkin_make_isolated -DCMAKE_TOOLCHAIN_FILE=${HOME}/Projects/${MY_PROJ}/RPI3+_Melodic_Toolchain.cmake
CMake Error at ${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/assert.cmake:17 (message):
Assertion failed: check for file existence, but filename
  (RT_LIBRARY-NOTFOUND) unset.  Message: RT Library

Call Stack (most recent call first):

  ${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/tools/rt.cmake:42 (assert_file_exists)
  ${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/all.cmake:159 (include)
  ${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:20 (include)
  CMakeLists.txt:10 (find_package)
进行一些挖掘后,目标设备(即RaspberryPi 3+)没有
librt.so
。有趣的是,如果我在设备上为项目运行
catkin\u make
,一切都会成功构建。因此,我不认为尝试安装它是真正必要的(或正确的解决方案)

此外,我应该注意到目标安装了ROS-Melodic-Base,而我的开发机器安装了ROS-Melodic-Desktop。我不确定这是否会导致我遇到的问题,但我不想过早地排除它

所以,我的问题是我应该如何继续?我在设置工具链时是否忽略了什么,或者我是否假设ROS/Catkin的某些内容是错误的

提前感谢您的帮助和考虑

编辑/补遗

根据要求,以下是工具链文件:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)

SET(CMAKE_C_COMPILER   $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/arm-linux-gnueabihf/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)

sysroot
中,我复制了RaspberryPi的
/opt
目录,因为那里安装了ROS Melodic库。我发现这些库可能具有RaspberryPi/Tools
sysroot/usr/include
目录中找不到的依赖项(例如
log4cxx/level.h
)。同样,解析共享对象依赖关系也同样麻烦。

问题似乎源于交叉编译工具本身:使用
arm-linux-gnueabihf-gcc
&
arm-linux-gnueabihf-g++
from意味着编译器是以已知配置配置的libc库。例如,
math.h
包括
bits/math vector.h
;在GitHub的RaspberryPi工具中,它位于
../sysroot/usr/include/bits
,而直接从RaspberryPi 3B+复制的工具位于
/usr/include/arm linux gnueabf/bits
。各自的编译器(本机和交叉编译)是使用各自的配置构建的,而不是其他配置,并且不能(很好地)搜索通用路径。

您没有
/usr/lib/arm-linux-gnueabihf/librt.so
?它来自我的RPI3(
dpkg-S/usr/lib/arm-linux-gnueabihf/librt.so
)上的包
libc6-dev
),感谢您提供完整的路径
find${HOME}/Projects/TargetResources/lib-f librt.so
没有返回任何内容,但是当我向下导航到该目录时,我发现我只有一个软链接
librt.so.1->librt-2.24.so
。我可能只需要添加额外的软链接。它应该可以工作,因为这就是我所拥有的:我做了一些挖掘,没有注意到额外的
/usr/lib/arm-linux-gnueabihf/librt.so
参数。是的,除了v2.24之外,我还有您所拥有的(请参阅)。软链接解决方案对我不起作用。我还试图研究交叉编译工具。如果它应该是
libc6
的一部分,那么我从git hub获取的RaspberryPi开发工具库很可能没有引用它自己的库?如果没有看到
RPI3+\u Melodic\u Toolchain.cmake
文件,很难说。把它加到你的问题里