如何链接到静态库?

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)

statictestsmyownlib 都构建完美。

【问题讨论】:

你试过了吗? 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)

【讨论】:

以上是关于如何链接到静态库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cmake生成基于静态库的动态链接库

如何链接到 C 中的静态库?

使用 cmake 如何静态链接一些库和动态链接其他库?

当 iOS 应用程序链接到静态库时,如何获取丢弃的符号列表?

VS2015 MFC - 如何将静态库资源链接到项目

如何强制 gcc 链接未使用的静态库