2

我已经创建了我的 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 使用函数

4

1 回答 1

6

与图书馆订购事宜 - 尝试:

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

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

(Note: there are certain linker options that can change this behavior, but they seem to be rarely used and probably have their own set of drawbacks so I don't discuss them here. this kind of problem is usually resolved by reordering the linker's input file list).

于 2012-05-02T20:52:44.700 回答