CMake导入库rpath
CMake imported library rpath
我有一个 IMPORTED
SHARED
库,我通过 target_link_libraries
与它链接(该库已设置 IMPORTED_LOCATION
)。
但是在 ldd
输出中安装之后,我看到如下内容:
path/on-dev-machine/to/libxxx.so => not found
而不仅仅是
libxxx.so => path/on-testing-machine/to/libxxx.so
为什么会这样/我该如何解决?我正在将库路径添加到 /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
也很有用,可确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。
我有一个 IMPORTED
SHARED
库,我通过 target_link_libraries
与它链接(该库已设置 IMPORTED_LOCATION
)。
但是在 ldd
输出中安装之后,我看到如下内容:
path/on-dev-machine/to/libxxx.so => not found
而不仅仅是
libxxx.so => path/on-testing-machine/to/libxxx.so
为什么会这样/我该如何解决?我正在将库路径添加到 /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
也很有用,可确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。