1

我创建了一个静态库 , libstuff.a,gccar. 我已经将库安装/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

如果我libstuff.a/custom/lib/dir/编译器中删除抱怨/usr/bin/ld: cannot find -lstuff。如果我把它放回去,它不会抱怨。所以它正确地找到了存档。

#include "stuff.h"如果我从gcc中删除该行代码,则会main.c抱怨stuff_init未定义,因此它可以正确找到标头。

如果我运行nm libstuff.a,输出包括0000000000000000 T stuff_init. 所以函数是在归档文件中定义的。

那么我做错了什么?

4

1 回答 1

5

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

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

如果库之外有多个目标文件,则将它们全部列在任何库之前。这些-L选项可以在-llib使用给定目录中的库的选项之前的任何位置。

于 2014-03-25T01:36:56.140 回答