CMake导入库rpath

标签 cmake shared-libraries ld

我有一个 IMPORTED SHARED 库,我通过 target_link_libraries 与它链接(该库有 IMPORTED_LOCATION设置)。

但是在 ldd 输出中安装之后,我看到了类似这样的东西:

path/on-dev-machine/to/libxxx.so => 找不到

不仅仅是

libxxx.so => path/on-testing-machine/to/libxxx.so

为什么会这样/我该如何解决?我正在将 lib 路径添加到 /etc/ld.so.conf.d

示例代码:

include(GNUInstallDirs)

function(add_and_install_lib lib_name location external_dep)
    if(${location} MATCHES ".*\\.so")
        add_library(${lib_name} SHARED IMPORTED) # MODULE treated as shared
    else()
        add_library(${lib_name} STATIC IMPORTED)
    endif()

    set_property(TARGET ${lib_name} PROPERTY IMPORTED_LOCATION ${location})

    add_dependencies(${lib_name} ${external_dep})
endfunction()


set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR}") # this doesn't seem to help

最佳答案

如果有人关心的话,是每个导入的库的 IMPORTED_NO_SONAME 属性(没有设置为 TRUE)强制采用完整路径。

此外,CMAKE_SKIP_RPATHCMAKE_SKIP_INSTALL_RPATH 在我看来也很有用,可确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。

关于CMake导入库rpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156335/

相关文章:

search - 如何包含额外的 CMakeLists.txt

c++ - C++ 和共享库中的代码执行点

macos - 在 Mac osx 中将 .a 转换为 .dylib

linux - llvm-ld如何定位libstdc++

gcc - 构建交叉编译 64 位 GCC 失败

c++ - 需要避免在需要使用链接器脚本 *.ld 文件的静态库中对 `WinMain' 的 undefined reference

windows - Windows 上的 NASM 在 UTF-8 源代码的第一行出现错误,无论它是什么 : hello. asm:1: 错误:解析器:需要指令

cmake - 对于 CMake 的 “install” , CONFIGURATIONS 参数有什么作用?

无法链接到 macOS 上的 C 标准库

python - 如何为 python 版本 2 和 3 构建 OpenCV?