CMake为什么通过相对路径链接外部库
Why does CMake links external library by relative path?
我在我的项目外部共享库中使用。我写了一个成功定位库并创建依赖性目标
的发现器...
set(_target MyLib)
add_library(${_target} UNKNOWN IMPORTED)
set_target_properties(${_target}
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MYLIB_INCLUDE_DIRS}")
set_property(TARGET ${_target}
APPEND PROPERTY IMPORTED_LOCATION "${MYLIB_LIBRARIES}")
...
message("${MYLIB_LIBRARIES}")
> /absolute/path/to/mylib.so
我使用此库定义了一个目标,其他库
add_library(my_final_target SHARED
mysource.cpp
PRIVATE
MyLib
SomeOtherLib)
构建性能还可以,但是当我查看 ldd 信息时,我会看到
ldd my_final_target.so
...
some_other_lib.so -> /absolute/path/to/some_other_lib.so
../../../some/relative/path/mylib.so
...
mylib.so和some_other_lib.so的查找器代码几乎相同。它们位于邻居文件夹中的同一磁盘上。文件命令输出似乎也合理:
ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped
我没有使用奇怪的汇编标志或政策。问题可能是什么?
听起来很奇怪,因为mylib。
objdump -p mylib.so | grep SONAME
>
objdump -p some_other_lib.so | grep SONAME
> SONAME some_other_lib.so
我用
修复了sonamepatchelf --set-soname mylib.so mylib.so
现在很好:
ldd my_final_target.so
...
some_other_lib.so -> /absolute/path/to/some_other_lib.so
mylib.so -> /absolute/path/to/mylib.so
...
编辑:重复。看到这个问题。我的Google Fu使我失望...
相关文章:
- 未解决的外部链接问题
- CMake 无法链接外部库
- 外部"C"拆卸导致奇怪的链接器错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 链接外部C++外部C++ 在主文件中?
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 内联函数/变量的外部链接
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- C 与 C++ 枚举链接与外部"C"
- 在 CMake 中链接外部 HDFql 库
- CURL 静态链接未解析的外部符号
- 在 Android Studio 中使用 NDK、Gradle 和 CMake 链接外部库
- CMake为什么通过相对路径链接外部库
- 如何使用 CMake 正确链接外部库
- 有没有办法在整个项目中包含和链接外部库,只编辑我的顶级 CMakeList
- Android:在Android Studio中链接外部静态C/C++库
- 链接外部变量 c++ 时出错
- 如何在llvm IR表示中链接外部库
- 在Android Studio (gradle)中链接外部库