我正在尝试链接一个名为 libtest-lib.so 的预编译共享库文件。这是我在 CMakeLists.txt 底部的内容:
link_directories("/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a")
add_library(testlib libtest-lib.so)
target_link_libraries(testlib libtest-lib.so)
如上所述,我收到以下错误:
CMake Error at CMakeLists.txt:49 (add_library):
Cannot find source file:
libtest-lib.so
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error: CMake can not determine linker language for target: testlib
如果我注释掉 add_library 行,我会得到以下信息:
CMake Error at CMakeLists.txt:51 (target_link_libraries):
Cannot specify link libraries for target "testlib" which is not built by this project.
在库中链接时,似乎绝对需要源文件(.c、cpp 等)。但是如何在 .so 文件中进行链接?文档对 target_link_libraries() 说了以下内容:
名称必须是通过 add_executable() 或 add_library() 等命令在当前目录中创建的。
如果我用 add_executable() 替换 add_library() 我会得到同样的错误。在 CMake 中链接 .so 文件的正确方法是什么?
原文由 Dimitri Lozovoy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我找到了另一种解决方法,在将 lib 链接到可执行文件时提及库所在的路径。
这是间接的,包括库搜索路径标志。在使用该库时,可能还必须链接头文件的位置。