【发布时间】:2018-08-15 19:35:16
【问题描述】:
我有一个 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
为什么会这样/我该如何解决?我正在将 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_LOCATION 仅在构建阶段有效。要使库在运行时可搜索,请参阅CMake RPATH handling。
-
@Tsyvarev
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR}")似乎没有帮助,LD_LIBRARY_PATH也没有,我想问题在于不知何故有一个完整的 lib 路径而不是 lib 文件本身(在左边=>的ldd)。你知道为什么会这样吗? -
显示 CMake 代码。没有代码,很难说出路径的正确性。
-
@Tsyvarev 你在这里
-
您显示的代码不会创建可执行文件,不会将其与外部库链接,也不会安装它。相反,它定义了一个以外部库的位置为参数的函数,人们只能猜测它具有哪个值。请提供minimal reproducible example。另外,您谈到了 path-on-dev-machine 和 path-on-testing-machine。这是否意味着您将可执行文件安装在“dev”机器上,然后将其复制到“testing”机器?
标签: cmake shared-libraries ld