如何链接到静态库?
Posted
技术标签:
【中文标题】如何链接到静态库?【英文标题】:How to link to static library? 【发布时间】:2014-01-10 13:08:40 【问题描述】:我有一个可执行文件,该可执行文件链接到我构建的静态库和已构建的提供给我的另一个库。
我正在尝试让 cmake 链接到它,但我总是收到以下错误:
ld: library not found for -lsrc/thislibrary/libthislibrary.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [MyExecutable] Error 1
make[1]: *** [CMakeFiles/DocumentParserTests.dir/all] Error 2
make: *** [all] Error 2
这些是我的构建说明:
add_executable(MyExecutable tests/MyExecutable.cpp)
target_link_libraries(MyExecutable statictests)
target_link_libraries(MyExecutable myownlib)
target_link_libraries(MyExecutable src/thislibrary/libthislibrary.a)
statictests
和 myownlib
都构建完美。
【问题讨论】:
你试过了吗?use -v to see invocation
它说什么?
【参考方案1】:
CMake 正在从与您预期不同的工作目录运行链接命令。不要在 CMakeLists.txt 文件中使用裸露的相对路径,而是使用特殊变量 $CMAKE_SOURCE_DIR
、$CMAKE_CURRENT_SOURCE_DIR
、$CMAKE_BINARY_DIR
等。
有关这些含义的快速备忘单,请参阅http://www.cmake.org/Wiki/CMake_Useful_Variables,或参阅 CMake 文档。
在你的情况下,我怀疑正确的路径位置是这样的:
target_link_libraries(MyExecutable $CMAKE_CURRENT_SOURCE_DIR/src/thislibrary/libthislibrary.a)
【讨论】:
以上是关于如何链接到静态库?的主要内容,如果未能解决你的问题,请参考以下文章