首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉编译从挂载目录中使用boost

交叉编译从挂载目录中使用boost
EN

Stack Overflow用户
提问于 2020-07-27 14:34:11
回答 1查看 222关注 0票数 0

我试图交叉编译一个Jetson纳米 (aarch64)用x86_64 PC的ROS包。我使用的nvidia提供的工具链 (GCC工具链64位BSP).我一直在跟踪这篇文章的指导

由于编译器需要来自aarch64系统的boost二进制文件,所以我已经将nano的/usr/include/boost安装到构建目录的usr/include/boost中。这是我的构建目录传家宝。

代码语言:javascript
复制
.
├── gcc-4.8.5-aarch64   #<cross compiler>
│   └── install
│       ├── aarch64-unknown-linux-gnu
│        ...
├── opt                 #<ROS source files from nano>
│   └── ros
│       └── melodic
├── src                 #<test c++ code in here>
│   └── test_cpp
│       └── src
└── usr
    ├── include
    │   └── boost       #<nano's /usr/include/boost mounted in here>
    └── lib
        └── aarch64-linux-gnu  #<nano's /usr/lib/aarch64-linux-gnu mounted in here>

编译时,我会发现编译器找不到boost库的错误。

代码语言:javascript
复制
from /home/teshan/xcompile/src/test_cpp/src/talker.cpp:1: /home/teshan/xcompile/opt/ros/melodic/include/ros/time.h:58:50: 
fatal error: boost/math/special_functions/round.hpp: No such file or directory  
#include <boost/math/special_functions/round.hpp>
                                                 ^ 
compilation terminated.

我在挂载的目录usr/include/boost中有usr/include/boost文件。但似乎CMake找不到它。相反,它是boost/math/special_functions/round.hpp: No such file or directory,我认为它表示它搜索根目录中的boost目录(如果我错了,请纠正我)。

我看过的答案,但是设置BOOST_ROOT似乎没有效果。任何对此的洞察力都会有很大帮助。

TL;博士

这是我的构建脚本

代码语言:javascript
复制
#!/bin/bash

PWD=$(pwd)
export LANG=C
source /opt/ros/melodic/setup.bash

catkin config --extend ${PWD}/opt/ros/melodic/

catkin build -j8 --cmake-args \
-DCMAKE_TOOLCHAIN_FILE=${PWD}/toolchain.cmake \
-DCMAKE_CROSS_COMPILE_PREFIX=${PWD} \
-DRT_LIBRARY=${PWD}/usr/lib/aarch64-linux-gnu/ 

这是我的toolchain.cmake

代码语言:javascript
复制
SET(CMAKE_SYSTEM_NAME Linux)

SET(CMAKE_C_COMPILER ${NANO_ROOT_PATH}/gcc-4.8.5-aarch64/install/bin/aarch64-unknown-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER ${NANO_ROOT_PATH}/gcc-4.8.5-aarch64/install/bin/aarch64-unknown-linux-gnu-g++)

# Below call is necessary to avoid non-RT problem.
SET(CMAKE_LIBRARY_ARCHITECTURE aarch64-linux-gnu)

SET(NANO_ROOT_PATH ${CMAKE_CURRENT_LIST_DIR})
SET(NANO_MELODIC_PATH ${NANO_ROOT_PATH}/opt/ros/melodic)

SET(CMAKE_FIND_ROOT_PATH ${NANO_ROOT_PATH} ${CATKIN_DEVEL_PREFIX})
SET(COMPILER_ROOT ${NANO_ROOT_PATH}/gcc-4.8.5-aarch64/install)

#Have to set this one to BOTH, to allow CMake to find rospack
#This set of variables controls whether the CMAKE_FIND_ROOT_PATH and CMAKE_SYSROOT are used for find_xxx() operations.
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

SET(CMAKE_PREFIX_PATH ${NANO_MELODIC_PATH} ${NANO_ROOT_PATH}/usr)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=${NANO_ROOT_PATH}" CACHE INTERNAL "" FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=${NANO_ROOT_PATH}" CACHE INTERNAL "" FORCE)
SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --sysroot=${NANO_ROOT_PATH}" CACHE INTERNAL "" FORCE)
SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} --sysroot=${NANO_ROOT_PATH}" CACHE INTERNAL "" FORCE)

SET(LD_LIBRARY_PATH ${NANO_MELODIC_PATH}/lib)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

#Skip toolchain trying to build a test program first
SET(CMAKE_C_COMPILER_WORKS 1)
SET(CMAKE_CXX_COMPILER_WORKS 1)

set(BOOST_ROOT ${NANO_ROOT_PATH}/usr/include/boost)

set(COMPILER_SYSROOT ${COMPILER_ROOT}/aarch64-unknown-linux-gnu/sysroot)
include_directories(BEFORE SYSTEM ${COMPILER_SYSROOT}/usr/include/)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 03:33:16

通过安装整个/usr/include而不是/usr/include/boost解决了这个问题。编译器可能需要/usr/include中的其他文件/目录来查找Boost。

代码语言:javascript
复制
.
├── gcc-4.8.5-aarch64   #<cross compiler>
│   └── install
│       ├── aarch64-unknown-linux-gnu
│        ...
├── opt                 #<ROS source files from nano>
│   └── ros
│       └── melodic
├── src                 #<test c++ code in here>
│   └── test_cpp
│       └── src
└── usr
    ├── include         #<nano's /usr/include mounted in here>
    └── lib
        └── aarch64-linux-gnu  #<nano's /usr/lib/aarch64-linux-gnu mounted in here>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63117583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档