c - 针对静态库编译时遇到问题

标签 c linux gcc linker unix-ar

我用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 未定义,所以它正在正确找到 header 。

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

那我做错了什么?

最佳答案

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

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

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

关于c - 针对静态库编译时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623851/

相关文章:

处理文件和链接列表时崩溃

c - 使用格式说明符进行转换

使用 C 的命令行命令

linux - 通过project.vim 将文件添加到项目中

c - Unix 域套接字 : Make Latency constant

linux - 改进我的密码生成脚本

c - Eclipse IDE for C/C++, gcc 找不到 *.c 文件

c - 获取 x86-64 指令的大小

gcc - 编译错误: Redefinition of union name

c - 使用 gcc 进行调试