2014-03-25 85 views
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 

如果我从/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。所以该功能是在存档文件中定义的。

那么我做错了什么?

+0

共享库不是用'àr(1)'创建的,'libfoo.a'是一个* static *库。检查你的构建说明。 – vonbrand

+0

对不起,我的意思是说静态而不是共享。谢谢:) – Josh

+0

你真的应该显示你的确切和完整的链接命令行。 “基本上”很好,但不够具体。 –

回答

5

你不显示您的确切联线,但机会是你应该(但不要)的目标文件后列出库:

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

如果有一个以上的目标文件以外图书馆,然后列出所有图书馆之前。 -L选项可能会在使用来自给定目录的库的-llib选项之前的任何位置。

+0

解决了它。我有我的'-l'和'-L'标志出现在我的对象文件之前。谢谢! – Josh