【发布时间】:2021-03-14 16:51:47
【问题描述】:
我是 cmake/make 的新手,所以我正在尝试使用 include 和 lib 目录以及链接到主文件的库进行简单的编译。
我的目录结构是这样的
PROJECTDIRECTORY/
main.c
CMAKELISTS.txt
include/
add.h
lib/
add.a
build/
我的 main.c 包含
#include <add.h>
int main(void)
{
add(5,10);
return 0;
}
我的 add.h 包含
int add(int x,int y);
我的 add.a 是一个静态库,我从 add.c 编译而来,其中包含实现。
终于在我的 CMakeLists.txt 中有
cmake_minimum_required (VERSION 3.6)
project(addproject)
add_executable(addproject main.c)
include_directories(include)
link_directories(lib)
target_link_libraries(addproject add.a)
然后当我运行 cmake 。 ,它会正确生成makefile。
但是当我运行 make 时,我收到一个链接器错误
Scanning dependencies of target addproject
[ 50%] Building C object CMakeFiles/addproject.dir/main.c.o
[100%] Linking C executable addproject
ld: library not found for -ladd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [addproject] Error 1
make[1]: *** [CMakeFiles/addproject.dir/all] Error 2
make: *** [all] Error 2
说找不到要添加的库?即使我在 cmake 中设置 library_directories .. 有人可以帮我解决这个错误吗?
谢谢!
【问题讨论】:
-
add.c在哪里?您不应该链接到库 files,而应该链接到库 targets,尤其是当您自己创建它们时。 -
@AlexReinking 好吧,我正在使用库文件进行测试。所以 add.c 不存在,因为我已经将 add.a 编译到 add.c 中,我想看看是否可以将它与 cmake 链接..
-
那么您的问题的答案就在这里:stackoverflow.com/a/41909627/2137996
-
谢谢你回答了我的问题!