我有一个 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_RPATH
和 CMAKE_SKIP_INSTALL_RPATH
在我看来也很有用,可确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。
关于CMake导入库rpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156335/