簡體   English   中英

在RaspberryPi 3B +問題上交叉編譯ROS Melodic

[英]Cross-Compiling ROS Melodic on RaspberryPi 3B+ Problem

經過一些研究,我發現沒有為RaspberryPi交叉編譯ROS的單一“可靠的”方法。 我能想到的最好的方法是將/usr/lib/opt從目標設備下載到我的開發機器上(安裝在$HOME/Projects/TargetResources ),制作CMake工具鏈文件,並調用catkin_make_isolated -DCMAKE_TOOLCHAIN_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_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 )。 同樣,解決共享庫依賴關系也很麻煩。

看來問題出在交叉編譯工具本身:使用來自https://github.com/raspberrypi/tools的 arm-linux-gnueabihf-gccarm-linux-gnueabihf-g++意味着編譯器已配置有libc已知配置中的庫。 例如, math.h包括bits/math-vector.h 在GitHub的RaspberryPi Tools中,該文件位於.../sysroot/usr/include/bits而直接從RaspberryPi 3B +本身復制的文件位於/usr/include/arm-linux-gnueabf/bits 各個編譯器(本機編譯器和交叉編譯器)是使用它們各自的配置構建的,而不是使用其他配置構建的,並且不搜索(很好)通用路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM