我创建了一个静态库libstuff.a
,其中gcc
和ar
。我已经安装了/custom/lib/dir/
的库和/custom/include/dir/
的头文件。当我尝试编译另一个应用程序对存档时,我遇到了问题。编译时遇到静态库问题
我想编译的应用程序基本上使用gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff
。
当我尝试编译时,我得到关于我在stuff.h
中声明的函数的错误,并在stuff.c
中定义。
main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status
如果我从/custom/lib/dir/
删除libstuff.a
编译器会抱怨/usr/bin/ld: cannot find -lstuff
。如果我把它放回去,它不会抱怨。所以它正确地找到了档案。
如果我从main.c
中删除#include "stuff.h"
这行代码,gcc抱怨stuff_init
未定义,所以它正确地找到了标题。
如果我运行nm libstuff.a
,则输出包括0000000000000000 T stuff_init
。所以该功能是在存档文件中定义的。
那么我做错了什么?
共享库不是用'àr(1)'创建的,'libfoo.a'是一个* static *库。检查你的构建说明。 – vonbrand
对不起,我的意思是说静态而不是共享。谢谢:) – Josh
你真的应该显示你的确切和完整的链接命令行。 “基本上”很好,但不够具体。 –