我试图将程序从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)被替换为&#34; -lX11&#34;在cmake生成的link.txt中。为什么会这样?
答案 0 :(得分:0)
https://cmake.org/cmake/help/latest/command/target_link_libraries.html#overview
<块引用>在某些情况下,CMake 可能会要求链接器搜索库(例如,/usr/lib/libfoo.so
变为 -lfoo
),例如当检测到共享库没有 SONAME 字段时。请参阅政策 CMP0060 以讨论另一个案例。