c-针对静态库进行编译时出现问题



我用gccar创建了一个静态库libstuff.a。我在/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。因此,函数是在归档文件中定义的。

那么我做错了什么?

您没有显示确切的链接行,但很可能您应该(但不(在对象文件后面列出库:

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

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

相关内容

  • 没有找到相关文章

最新更新