对我自己的库的未定义引用

我用几个创建了我的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的函数

订单与图书馆有关 – 尝试:

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

基本上,链接器在输入文件列表中读取它时会读取它(这可能不是确切的工作方式,但我认为它可以作为经验法则很好)并且将解决任何仍然未定义的引用。 当它移动到下一个输入时,它不会再查看该库,因为它会沿途拾取任何新的未解析的引用。

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