C语言 对我自己的库的未定义引用



我已经创建了我的lib.a文件,其中包含几个

gcc -c file.c -o file.o

然后

ar sr lib/libtest.a file1.o file2.o file3.o

确认为

ar -t lib/libtest.a
file1.o
file2.o
file3.o

但是当我尝试编译测试应用程序时

gcc lib/libtest.a test.c -o test

我在函数 main 中得到了未定义的引用:从文件1.o,文件2.o,文件3.o到使用的函数

库的顺序很重要 - 尝试:

gcc test.c -o test lib/libtest.a 

基本上,链接器在输入文件列表中遇到库时会读取它(这可能不完全是事情的工作方式,但我认为它作为经验法则运行良好),并将解析任何尚未定义的引用剩余。当它移动到下一个输入时,它不会再次查找该库以查找沿途拾取的任何新的未解析引用。

(注意:有一些链接器选项可以改变这种行为,但它们似乎很少使用,并且可能有自己的缺点,所以我不在这里讨论它们。 此类问题通常通过对链接器的输入文件列表重新排序来解决)。

相关内容

  • 没有找到相关文章

最新更新