为什么对象文件的顺序对静态库很重要?

时间:2016-04-17 22:54:29

标签: c static-libraries ar

我创建了一些文件: file1.c file2.c file3.c 我使用gcc -c file1.c编译它们,我为其他文件做了同样的事情,我得到了目标文件。后来我用ar工具创建了静态库。

Everythink工作正常,但ar有选项

ar -m -a file.o lib.a filetomove.o

在库中移动目标文件,为什么目标文件的顺序很重要?请向我展示目标文件必须按正确顺序排列的示例。

1 个答案:

答案 0 :(得分:2)

随着时间的推移,问题越来越少,但很长一段时间,连接器都是单通道。这意味着如果符号在a.o中定义并在b.o中引用,则链接器必须"参见" b.o 之前 a.o或它永远找不到参考的定义。

在其他情况下,有时会出现"默认"函数在最后链接的库中提供。这是嵌入式系统开发中的一种流行技术。您可以通过在静态库或对象模块中链接它来提供覆盖功能,但如果您不这样做,最后一个库将提供满足链接器的符号。