使用 CMake 链接共享库

新手上路,请多包涵

我正在尝试链接一个名为 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 许可协议

阅读 990
1 个回答

我找到了另一种解决方法,在将 lib 链接到可执行文件时提及库所在的路径。

 INCLUDE_DIRECTORIES(/path/to/headers)
ADD_EXECUTABLE(TARGET target.c)
TARGET_LINK_LIBRARIES(TARGET_FILE "-L/path/to/shared/library" SHARED_LIB_name)

这是间接的,包括库搜索路径标志。在使用该库时,可能还必须链接头文件的位置。

原文由 KeerthiKishan Alavala 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏