如何链接到静态库?

时间:2014-01-10 13:08:41

标签: c++ cmake clang

我有一个可执行文件链接到我构建的静态库和另一个已经构建的库。

我正在尝试让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都完美无瑕地构建。

1 个答案:

答案 0 :(得分:2)

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)