我对C ++构建流程很陌生,我正在考虑切换为我的库使用部分链接而不是创建ar
存档。我希望在我不可避免的最终编译步骤中减少链接时间,并且我想部分链接一些库可以节省我在最后一步中链接所有内容的时间。
我所描述的可能吗?我认为它应该是ld -Ur -o mylib.o [components]
行。是否有重要的构建注意事项,我没有考虑到这一点?
答案 0 :(得分:6)
在ar
存档中丢失目标文件的重要影响,即只链接引用的对象。
如果foo.o
的符号为foo
,bar.o的符号为bar
ar
,则仅引用foo
符号,只链接foo.o
。如果您改为使用部分链接,两者的内容将最终出现在可执行文件中,即使bar
从未在任何地方引用过。
您也可以尝试使用更快的链接器,例如gold。
答案 1 :(得分:0)
另一次要使用ld -r进行部分链接是因为你有一些目标文件包含提供某些功能所需的静态初始化,但是任何代码都不会直接调用它。 / p>
如果您愿意,我可以写一份文件,展示其运作方式及其工作原理!
(例如,参见运行时C ++类注册,它使用一个静态寄存器函数,在注册表中注册自己,然后可以用它来创建和返回具有多态行为的Base *,因为它创建了一个继承的新对象来自Base。请参阅C++ runtime knowledge of classes这是我问过的问题的答案。)