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