【发布时间】:2015-05-18 14:19:33
【问题描述】:
我正在尝试将程序从 x86_64 交叉编译到 arm。我在链接时遇到了问题,这是由 cmake 引起的。
# Toolchain file
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_ASM_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_FIND_ROOT_PATH <path/to/rootfs>)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
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_STAGING_PREFIX <path/to/stage>)
set(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnueabihf)
# CMakeLists.txt
find_library(LIB_X11 X11)
message("X11: ${LIB_X11}")
target_link_library(<my exe> ${LIB_X11})
CMake 将打印出 X11 和我正在使用的所有其他库的绝对路径
<path/to/my/rootfs>/usr/lib/arm-linux-gnueabihf/libX11.so
我希望当我链接库时在 link.txt 中看到这样的参数:
-l<path/to/my/rootfs>/usr/lib/arm-linux-gnueabihf/libX11.so
但是由于某种原因,X11(并且只有 libX11)在 cmake 生成的 link.txt 中被替换为“-lX11”。为什么会这样?
【问题讨论】:
标签: cmake cross-compiling