CMake 链接 2 个具有相对路径的库
CMake linking 2 libraries with relative path
我的项目结构:
...
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/
并清除build
目录时rm -rf build/*
任何包含libB的代码都会抛出error while loading shared libraries: liblibB.so: cannot open shared object file: No such file or directory
如何获取使用相对文件路径的链接?
旁注:我需要它们是 2 个独立的共享库和一个链接
您需要将libA
的运行时路径设置为安装位置。这是通过-rpath
链接器选项完成的。
由于链接时将使用C++前端g++
或clang++
,因此需要使用-Wl
标志将-rpath
选项传递给链接器。
您可以使用set_target_properties
命令使用LINK_FLAGS
目标属性设置libB
标志:
set_target_properties(libB
PROPERTIES LINK_FLAGS "-Wl,-rpath,/path/to/libA/installation")
如在 CMake 中将 2 个库与相对路径注释链接:
为变量分配库的相对路径的绝对路径:
get_filename_component(LIB_A_PATH ../lib/liba.a ABSOLUTE)
然后使用绝对路径链接库(此处为静态(:
add_library( lib_a STATIC IMPORTED )
set_target_properties(lib_a PROPERTIES IMPORTED_LOCATION ${LIB_A_PATH})
target_link_libraries(${PROJECT_NAME} lib_a)
相关文章:
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何获取 CMake 单元测试的相对路径?
- 从另一个应用启动我的应用时出现相对路径更改问题
- CMake 链接 2 个具有相对路径的库
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 在可执行文件中使用带有符号链接的相对路径
- C++流找不到相对路径
- 如何将COM .tlb文件导入具有相对路径C++文件中?
- C++包括断开的相对路径
- CMake 安装具有相对路径的目标
- CMake为什么通过相对路径链接外部库
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径
- 如何将共享库与具有相对路径的 CMake 链接
- 相对路径中的错误
- C 能够以其完整路径打开代码::块中的文件,但不能以相对路径作为命令行参数打开文件
- 如何在基于QT的Autodesk Maya插件中使用相对路径
- 如何使用QT程序中的默认应用程序打开使用相对路径的PDF
- Visual Studio单元使用具有相对路径的文件测试
- 在 Visual Studio 中为 SFML 设置相对路径
- 如何配置MSVC以使用__FILE__显示头文件的相对路径