arm交叉编译时如何处理Boost之类的库?
How to deal with libraries like Boost when cross compiling for arm?
我想从我的 AMD64 桌面交叉编译到 ARM7 for Beagleboard Black。所以我开始用这个来安装交叉编译器:
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
我还创建了一个 cmake 工具链文件:
set (CMAKE_SYSTEM_NAME Linux)
set (CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set (CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
当我 运行 cmake 时,我看到它确实找到了正确的编译器。但是我该如何处理我需要 link 的库呢?比如升压?我假设我的 x86/amd64 桌面上需要这些库的 arm 版本才能编译和 link 工作。
这是我尝试 运行 cmake 时看到的错误消息示例:
cmake -DCMAKE_TOOLCHAIN_FILE=Arm_Toolchain ..
CMake Error at /usr/share/cmake-3.0/Modules/FindBoost.cmake:1199 (message):
Unable to find the requested Boost libraries.
Boost version: 1.55.0
Boost include path: /usr/include
Could not find the following static Boost libraries:
boost_log_setup
boost_log
boost_date_time
boost_filesystem
boost_program_options
boost_regex
boost_system
boost_thread
boost_chrono
是的,您需要 boost 库,它们不是仅为 ARM 构建的头文件。
这个 SO 问题涵盖了:
要使 find_package
之类的东西适用于交叉编译,您应该设置 CMAKE_FIND_ROOT_PATH
.
假设您将 CMAKE_FIND_ROOT_PATH
设置为 /opt/beagleboard
。然后 CMake 将首先在 /opt/beagleboard/lib
和 /opt/beagleboard/usr/lib
处查找库,因此将您的库安装在那里,它应该可以工作。
找到与交叉编译相关的各种 CMake 设置的很好解释
我想从我的 AMD64 桌面交叉编译到 ARM7 for Beagleboard Black。所以我开始用这个来安装交叉编译器:
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
我还创建了一个 cmake 工具链文件:
set (CMAKE_SYSTEM_NAME Linux)
set (CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set (CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
当我 运行 cmake 时,我看到它确实找到了正确的编译器。但是我该如何处理我需要 link 的库呢?比如升压?我假设我的 x86/amd64 桌面上需要这些库的 arm 版本才能编译和 link 工作。
这是我尝试 运行 cmake 时看到的错误消息示例:
cmake -DCMAKE_TOOLCHAIN_FILE=Arm_Toolchain ..
CMake Error at /usr/share/cmake-3.0/Modules/FindBoost.cmake:1199 (message):
Unable to find the requested Boost libraries.
Boost version: 1.55.0
Boost include path: /usr/include
Could not find the following static Boost libraries:
boost_log_setup
boost_log
boost_date_time
boost_filesystem
boost_program_options
boost_regex
boost_system
boost_thread
boost_chrono
是的,您需要 boost 库,它们不是仅为 ARM 构建的头文件。
这个 SO 问题涵盖了:
要使 find_package
之类的东西适用于交叉编译,您应该设置 CMAKE_FIND_ROOT_PATH
.
假设您将 CMAKE_FIND_ROOT_PATH
设置为 /opt/beagleboard
。然后 CMake 将首先在 /opt/beagleboard/lib
和 /opt/beagleboard/usr/lib
处查找库,因此将您的库安装在那里,它应该可以工作。