【发布时间】:2018-10-15 20:20:21
【问题描述】:
我的项目结构:
...
CMakeLists.txt
src/
project/
libA/
CMakeLists.txt
libA.h
libA.cpp
libB/
CMakeLists.txt
libB.h
libB.cpp
build/
CMakelists.txt
project(project)
# set some global dirs
set(LIB_A_DIR "src/project/libA")
set(LIB_B_DIR "src/project/libB")
# include header directories
include_directories(${LIB_A_DIR})
include_directories(${LIB_B_DIR})
# generating linkable libraries
add_subdirectory(${LIB_A_DIR})
add_subdirectory(${LIB_B_DIR})
src/project/libA/CMakeLists.txt
# define libA sources
set(LIB_A_SOURCES libA.cpp libA.h)
# generate libA library
add_library(libA SHARED ${LIB_A_SOURCES})
src/project/libB/CMakeLists.txt
# define libB sources
set(LIB_B_SOURCES libB.cpp libB.h)
# generate libB library
add_library(libB SHARED ${LIB_B_SOURCES})
# link libraries
target_link_libraries(libB PRIVATE libA)
现在,如果我从 build 文件夹运行 cmake .. && make,则从 libB 进行的任何函数调用都可以正常工作。但是一旦我想移动这个文件结构,链接就会中断。
例如,当我执行cp -r build/ build_copy/ 并使用rm -rf build/* 清除build 目录时,任何包含libB 的代码都会抛出error while loading shared libraries: liblibB.so: cannot open shared object file: No such file or directory
如何让我的链接使用相对文件路径?
旁注:我需要它们是 2 个独立的共享库并结合一个链接
【问题讨论】: