我用gcc
和ar
创建了一个静态库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/