我已经用几个
创建了我的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
中得到了未定义的引用:
使用来自file1.o,file2.o,file3.o
答案 0 :(得分:6)
订单与图书馆有关 - 尝试:
gcc test.c -o test lib/libtest.a
基本上,链接器在输入文件列表中读取它时会读取它(这可能不是确切的工作原理,但我认为它可以作为经验法则很好)并且将解决任何仍然未定义的库参考剩余。当它移动到下一个输入时,它将不再查看该库以查找它在此过程中拾取的任何新的未解析的引用。
(注意:某些链接器选项可以改变这种行为,但它们似乎很少使用,可能有各自的缺点,所以我不在这里讨论它们。这种问题通常通过重新排序来解决链接器的输入文件列表)。