我创建了一些文件:
file1.c
file2.c
file3.c
我使用gcc -c file1.c
编译它们,对其他文件也这样做,得到了对象文件。后来我使用ar
工具创建了静态库。
Everything工作正常,但ar
有选项
ar -m -a file.o lib.a filetomove.o
要在库中移动对象文件,为什么对象文件的顺序很重要?请给我举个例子,说明对象文件的顺序必须正确。
随着时间的推移,问题越来越小,但在很长一段时间内,链接器都是单程的。这意味着,如果一个符号在a.o中定义并在b.o中引用,链接器必须在a.o之前"查看"b.o,否则它永远找不到引用的定义。
在其他情况下,有时在最后链接的库中提供"默认"函数。这是嵌入式系统开发中的一种流行技术。您可以通过在静态库或对象模块中链接来提供重写函数,但如果不这样做,最后一个库将提供满足链接器的符号。