我创建了一些文件:
file1.c
file2.c
file3.c
我使用gcc -c file1.c
编译它们,我为其他文件做了同样的事情,我得到了目标文件。后来我用ar
工具创建了静态库。
Everythink工作正常,但ar
有选项
ar -m -a file.o lib.a filetomove.o
在库中移动目标文件,为什么目标文件的顺序很重要?请向我展示目标文件必须按正确顺序排列的示例。
答案 0 :(得分:2)
随着时间的推移,问题越来越少,但很长一段时间,连接器都是单通道。这意味着如果符号在a.o中定义并在b.o中引用,则链接器必须"参见" b.o 之前 a.o或它永远找不到参考的定义。
在其他情况下,有时会出现"默认"函数在最后链接的库中提供。这是嵌入式系统开发中的一种流行技术。您可以通过在静态库或对象模块中链接它来提供覆盖功能,但如果您不这样做,最后一个库将提供满足链接器的符号。