Jos*_*osh 1 c linux linker gcc unix-ar
我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
Run Code Online (Sandbox Code Playgroud)
如果我libstuff.a从/custom/lib/dir/编译器中删除抱怨/usr/bin/ld: cannot find -lstuff.如果我把它放回去,它不会抱怨.所以它正确找到档案.
如果我#include "stuff.h"从main.cgcc中删除代码行抱怨stuff_init未定义,那么它正确地找到了标题.
如果我跑nm libstuff.a,输出包括0000000000000000 T stuff_init.因此该函数在归档文件中定义.
那么我做错了什么?
您没有显示确切的链接行,但是您应该(但不要)在目标文件之后列出库:
gcc -o program main.o -L/custom/lib/dir -lstuff
Run Code Online (Sandbox Code Playgroud)
如果库外有多个目标文件,则在任何库之前列出它们.该-L选项可以将之前的任何地方去-llib使用图书馆从给定的目录选项.