c++ - 将共享库与 CMake 链接

标签 c++ cmake shared-libraries

我正在尝试链接一个名为 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() 说了以下内容:

named 必须是通过 add_executable() 或 add_library() 等命令在当前目录中创建的。

如果我将 add_library() 替换为 add_executable(),我会得到同样的错误。在 CMake 中链接 .so 文件的正确方法是什么?

最佳答案

我认为你想要的是为 CMake 导入一个库:

 add_library(testlib SHARED IMPORTED)
 set_property(TARGET testlib PROPERTY IMPORTED_LOCATION "/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libtest-lib.so")

参见 https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Exporting-and-Importing-Targets了解更多信息

关于c++ - 将共享库与 CMake 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642341/

相关文章:

c++ - 始终使用 Visual Studio 中可用的最新工具集

c++ - 如何在 C 中使用 char *

mysql - 在多线程应用程序中使用 libmysqlclient

c++ - ptrdiff_t typedef 冲突 - google-test 和 intel anaconda

android-ndk - 构建共享静态库依赖

c++ - CMake - 链接错误和 undefined reference

c++ - 大于或等于 56 字节的散列数据

c++ - 无法在 VS 2013 社区中创建 C++ 项目

c++ - C++代码的静态链接

C++ dll堆内存分配问题