我对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)
当我构建项目时(使用make
),它可以正常工作,并且可以正确创建链接(我已使用ldd
命令检查了它)。但是,当我尝试安装它时(使用make install
),安装路径中生成的文件未链接到指定的共享库。
再次使用ldd
,我检查了安装路径中生成的库找不到共享库,尽管它位于构建路径中生成的库中。我怎么能解决这个问题?
感谢。
Pd:我在CMake 3.5.1
中使用Ubuntu 16.04.2 LTS
。
答案 0 :(得分:1)
在/etc/ld.so.conf
。
如果您的共享库位于其中一个路径中,则应该找到它。如果在其中一个路径中不,则有四个选项:
LD_LIBRARY_PATH
(不推荐,因为它会覆盖系统搜索路径,它基本上是一个调试功能),或者 CMake 自动设置二进制文件的RPATH,以便在${CMAKE_BINARY_DIR}
中引用项目构建中的共享库。 (您希望针对刚刚构建的库测试二进制文件,而不是昨天安装的库。)
默认情况下,此make install
假设您正在安装到系统搜索路径中不的目标位置,您的二进制文件现在不再是"看到"它的共享库。咨询CMake RPATH handling 让CMake将二进制文件的RPATH设置为共享库的安装路径。
答案 1 :(得分:0)
我发现可以使用命令find_library
来解决问题,指定构建的共享库的路径,执行以下操作:
cmake_minimum_required(VERSION 2.8.12)
project(project_name)
include_directories(path_to_external_library_source_code)
find_library(LIBNAME LibName_1 LibName_2 HINTS built_lib_directory)
target_link_libraries(project_name ${LIBNAME})
install(TARGETS project_name DESTINATION installation_path)