cmake:“make install”不会链接到 Ubuntu 中的库

GLR*_*GLR 3 ubuntu cmake gnu-make

我是比较新的CMake,我已经开发了一个小的项目,建立一个库,链接到一个共享库,命名external_library。我的CMakeLists.txt文件看起来像这样:

cmake_minimum_required(VERSION 2.8.12)
project(project_name)

include_directories(path_to_external_library_source_code)
add_subdirectory(path_to_external_library_header_files subproject/external_library)

target_link_libraries(project_name external_library)
install(TARGETS project_name DESTINATION installation_path)
Run Code Online (Sandbox Code Playgroud)

当我构建项目(使用make)时,它运行良好,并正确创建了链接(我已使用ldd命令检查过它)。但是,当我尝试安装它(使用make install)时,安装路径中生成的文件未链接到指定的共享库。

ldd再次使用,我查了一下安装路径中生成的库中没有找到共享库,虽然在构建路径中生成的库中找到了。我怎么能解决这个问题?

谢谢。

Pd:我CMake 3.5.1Ubuntu 16.04.2 LTS.

Dev*_*lar 5

在某些路径中查找共享库,在/etc/ld.so.conf.

如果您的共享库位于这些路径之一中,则应该可以找到它。如果它不在这些路径之一中,您有四个选择:

  1. 安装在系统默认路径(这可能是不希望与实验软件,甚至有可能给您的权限)库;
  2. 编辑系统范围的搜索路径(不太希望触摸系统范围的设置,并且可能由于权限而无法实现),
  3. 设置LD_LIBRARY_PATH(不推荐,因为它会覆盖系统搜索路径,它基本上是一个调试功能),或
  4. 设置 RPATH,即“告诉”/“硬编码”二进制文件在何处查找其库。

发生的情况是 CMake 会自动设置二进制文件的 RPATH,以从您的项目构建中引用共享库${CMAKE_BINARY_DIR}。(您想针对您刚刚构建的库测试二进制文件,而不是您昨天安装的库。)

默认情况下,该RPATH设置清除make install(所以库${CMAKE_BINARY_DIR}不再被引用,而是搜索系统中的搜索路径)。

假设您要安装到不在系统搜索路径中的目的地,您的二进制文件现在不再“看到”其共享库。请咨询 CMake RPATH 处理 ,让 CMake 将二进制文件的 RPATH 设置为共享库的安装路径。