使用 cmake 链接静态库

时间:2021-07-04 14:27:29

标签: c++ cmake

如何将静态库与 cmake 链接?我尝试链接的库位于项目目录 lib/lib.a 中,唯一的源文件是 main.cpp。库 .hlib.a 文件位于 inlcude/library.h 中。
不工作我:

cmake_minimum_required(VERSION 3.16)
project(FireUp)

set(CMAKE_CXX_STANDARD 17)

link_directories(lib)

add_executable(FireUp main.cpp)

TARGET_LINK_LIBRARIES(FireUp lib.a)

输出:

-- Configuring done
-- Generating done
-- Build files have been written to: XXX/_projects/FireUp
[ 50%] Linking CXX executable FireUp
/usr/bin/ld: cannot find -l-Wl,-Bdynamic
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/FireUp.dir/build.make:84: FireUp] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/FireUp.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/FireUp.dir/rule] Error 2
make: *** [Makefile:118: FireUp] Error 2

不起作用二:

cmake_minimum_required(VERSION 3.16)
project(FireUp)

set(CMAKE_CXX_STANDARD 17)

add_executable(FireUp main.cpp)

TARGET_LINK_LIBRARIES(FireUp lib/lib.a)

输出:

Scanning dependencies of target FireUp
[ 50%] Building CXX object CMakeFiles/FireUp.dir/main.cpp.o
[100%] Linking CXX executable FireUp
/usr/bin/ld: cannot find -llib/lib.a
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/FireUp.dir/build.make:103: FireUp] Error 1
make[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/FireUp.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/FireUp.dir/rule] Error 2
make: *** [Makefile:137: FireUp] Error 2

不起作用 III:

cmake_minimum_required(VERSION 3.16)
project(FireUp)

set(CMAKE_CXX_STANDARD 17)

add_executable(FireUp main.cpp lib/lib.a)

输出:

[ 50%] Linking CXX executable FireUp
/usr/bin/ld: CMakeFiles/FireUp.dir/main.cpp.o: in function `main':
XXX/_projects/FireUp/main.cpp:6: undefined reference to `hello()'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/FireUp.dir/build.make:103: FireUp] Error 1
make[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/FireUp.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/FireUp.dir/rule] Error 2
make: *** [Makefile:137: FireUp] Error 2

1 个答案:

答案 0 :(得分:0)

将现有库添加到 cmake 就是添加一个“IMPORTED”库。

add_library(somelib STATIC IMPORTED)
set_property(TARGET somelib PROPERTY
             IMPORTED_LOCATION lib/lib.a)
target_link_libraries(FireUp PRIVATE somelib)

https://cmake.org/cmake/help/git-stage/guide/importing-exporting/index.html

lib.a 看起来像一个坏名字,我建议将库命名为 lib<something_here>.a 例如 liblib.a,以便 UNIX 编译器可以使用 -l 标志搜索它。同时研究Telling gcc directly to link a library statically .

相关问题