C 针对静态库编译时遇到的问题

C 针对静态库编译时遇到的问题,c,linux,gcc,linker,unix-ar,C,Linux,Gcc,Linker,Unix Ar,我创建了一个静态库,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

我创建了一个静态库,
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:找不到-lstuff
。如果我把它放回去,它就不会抱怨了。所以它正确地找到了档案

如果我从
main.c
gcc中删除代码
#include“stuff.h”
行,gcc会抱怨
stuff\u init
未定义,因此它会正确地查找标题

如果我运行
nmlibstuff.a
,则输出包括
0000000000000000 T stuff\u init
。因此,该函数在存档文件中定义


那么我做错了什么呢?

您没有显示确切的链接线,但您应该(但不要)在对象文件之后列出库:

gcc -o program main.o -L/custom/lib/dir -lstuff

如果库之外有多个对象文件,请在任何库之前列出所有对象文件。
-L
选项可能位于使用给定目录中的库的
-llib
选项之前的任何位置。

您没有显示确切的链接行,但您应该(但不要)在目标文件之后列出库:

gcc -o program main.o -L/custom/lib/dir -lstuff

如果库之外有多个对象文件,请在任何库之前列出所有对象文件。
-L
选项可能位于使用给定目录中的库的
-llib
选项之前的任何位置。

共享库不是用
r(1)
创建的,而
libfoo.a
是一个静态库。检查您的构建说明。对不起,我想说的是静态而不是共享。谢谢:)你真的应该显示你的确切和完整的链接命令行。“基本上”可以,但不够具体。链接行上的对象文件之前是-lstuff,还是之后是-lstuff?它需要在itA共享库不是用
a r(1)
创建之后,并且
libfoo.a
是一个静态库。检查您的构建说明。对不起,我想说的是静态而不是共享。谢谢:)你真的应该显示你的确切和完整的链接命令行。“基本上”可以,但不够具体。链接行上的对象文件之前是-lstuff,还是之后是-lstuff?它需要在它之后解决它。我的
-l
-l
标志出现在我的对象文件之前。谢谢这就解决了问题。我的
-l
-l
标志出现在我的对象文件之前。谢谢