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