【问题标题】:Why is cmake link_library replacing absolute path with "-l" for a single library?为什么 cmake link_library 用“-l”替换单个库的绝对路径?
【发布时间】: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


    【解决方案1】:

    https://cmake.org/cmake/help/latest/command/target_link_libraries.html#overview

    在某些情况下,CMake 可能会要求链接器搜索库(例如,/usr/lib/libfoo.so 变为 -lfoo),例如当检测到共享库没有 SONAME 字段时。参见政策CMP0060 以讨论另一个案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多