Dim*_*voy 3 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)
Run Code Online (Sandbox Code Playgroud)
如上所述,我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
如果我注释掉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.
Run Code Online (Sandbox Code Playgroud)
在库中链接时,似乎绝对需要源文件(.c,cpp等).但是如何链接.so文件?文档说下了关于target_link_libraries()的内容:
必须通过add_executable()或add_library()等命令在当前目录中创建named.
如果我用add_executable()替换add_library(),我会得到同样的错误.在CMake中链接.so文件的正确方法是什么?
oLe*_*Len 10
我认为你想要的是为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")
Run Code Online (Sandbox Code Playgroud)
https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets了解更多信息
add_library 创建一个新库。
相反,您想将您的库链接到其他目标。
比方说
add_executable(main main.cpp)
target_link_libraries(main libtest-lib)
Run Code Online (Sandbox Code Playgroud)
这应该已经可以工作了。
你应该有:
link_directories("/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a")
set(MY_SOURCES mylib.cpp)
add_library(testlib ${MY_SOURCES})
target_link_libraries(testlib libtest-lib)
Run Code Online (Sandbox Code Playgroud)
这意味着您应该将您的库的源指定为add_library()or的第二个参数add_executable(),而不是已编译的库。
您需要源代码,因为通常您构建的东西(库或可执行文件)需要链接到某个已经存在的库。
否则,你会建造什么?没有什么?并将库链接到什么?谁会是该图书馆的消费者?
| 归档时间: |
|
| 查看次数: |
38729 次 |
| 最近记录: |