【发布时间】:2014-03-25 01:31:37
【问题描述】:
我创建了一个静态库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是一个静态 库。检查您的构建说明。 -
对不起,我的意思是静态而不是共享。谢谢:)
-
你真的应该显示你的准确和完整的链接命令行。 “基本上”很好,但不够具体。
-
-lstuff before 是链接行上的目标文件还是之后?它需要在它之后
标签: c linux gcc linker unix-ar