我在使用CMake on linux(ubuntu)链接两个库时遇到问题。我有以下CMake设置。
cmake_minimum_required(VERSION 3.3)
project(lib1)
set(SOURCE_FILES
source_1.cpp)
# set library output directory
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../build/)
# Base directory relative to which all includes are
set(BASE_DIR ../)
#include base directory
include_directories ("${BASE_DIR}")
# create a shared library
add_library(lib1 SHARED ${SOURCE_FILES})
# make install target
install(TARGETS lib1 DESTINATION /usr/local/lib)
对于图书馆2,我们有
cmake_minimum_required(VERSION 3.3)
project(lib2)
set(SOURCE_FILES
source_2.cpp)
set(BASE_DIR ../)
#include base directory
include_directories ("${BASE_DIR}")
# create a shared library
add_library(lib2 SHARED ${SOURCE_FILES})
# include lib1 library
target_link_libraries(lib2 PUBLIC lib1)
install(TARGETS lib2 DESTINATION /usr/local/lib)
使用
运行这些cmake_minimum_required(VERSION 3.3)
project(all)
add_subdirectory(lib1)
add_subdirectory(lib2)
创建liblib1.so和liblib2.so。 liblib2.so依赖于liblib1.so(ldd liblib2.so在CMAKE_LIBRARY_OUTPUT_DIRECTORY目录中提供了liblib1.so的链接。)
运行后
make install
我得到了
-- Install configuration: "Release"
-- Up-to-date: /usr/local/lib/liblib1.so
-- Installing: /usr/local/lib/liblib2.so
-- Set runtime path of "/usr/local/lib/liblib2.so" to ""
并且在/ usr / local / lib中liblib2.so不再链接到liblib1.so。
我尝试了很多cmake文件的重做工作(例如:使用:
set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
但似乎没有任何帮助。任何人都可以解释如何在make install之后让库链接?
我手动运行了ldconfig
,但没有运气。 /usr/local/lib
也是ld.conf
的一部分,我正在运行ubuntu 16.04
。