我有大约50个不同的静态库链接到我的C++项目中,平均链接时间为70秒。
我发现改变库的链接顺序会改变这个时间。如果链接器不必在它建立的整个符号表中搜索一组符号,那么我想这是可以预料的。
我想我可以使用"nm"获取静态库之间的依赖关系图。然而,这只会给我一个"正确"的链接顺序。获取最快链接顺序所涉及的因素是什么?
我感觉这可能与上述的依赖关系图有关,通过获取尝试最小化某些数量的遍历路径,但我真的不确定是哪种数量。
任何帮助都将不胜感激。
我主要使用英特尔编译器,偶尔也使用gcc编译器。当我用 top 检查时,它们似乎都在使用GNU ld 链接器。希望这有所帮助...
因此,为了更加明确我的问题,我已经知道如何从一组静态库获取1-pass顺序。我自己编写了这个脚本,但正如Olaf下面的答案所建议的那样,有已知的工具可以做到这一点。
我的问题是,我已经有了两个1-pass链接顺序,其中一个运行时间约为85秒,另一个运行时间约为70秒。因此,显然我们仍然可以在1-pass顺序中进行更多的优化。
lorder
手册所说,它应该给出最快的链接顺序。也许你可以在你的系统上找到这个工具的版本。 - πάντα ῥεῖ