我已经创建了我的 lib.a 文件,其中包含几个
gcc -c file.c -o file.o
then
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
:
使用 file1.o、file2.o、file3.o 中的函数
图书馆的顺序很重要 - 尝试:
gcc test.c -o test lib/libtest.a
基本上,链接器在输入文件列表中遇到库时会读取该库(这可能不完全是工作方式,但我认为根据经验,它工作得很好),并将解析剩余的任何尚未定义的引用。当它移动到下一个输入时,它不会再次在该库中查找它在此过程中拾取的任何新的未解析的引用。
(注意:有某些链接器选项可以改变这种行为,但它们似乎很少使用,并且可能有自己的一系列缺点,所以我不在这里讨论它们。这种问题通常通过重新排序链接器的输入来解决文件列表)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)