减少c ++链接时间的技巧

时间:2010-12-29 19:56:49

标签: c++ linker

我有一个项目需要大约8秒才能与g ++和ld链接。

它使用了一堆静态库,大部分代码都是c ++。

我对如何缩短链接时间的一般提示感兴趣。 从“不包括调试符号”到“使代码减少spagetti”的任何内容

6 个答案:

答案 0 :(得分:8)

我在以前的工作中处理过这些问题多年。在链接大量静态库时,GNU链接器只会出现严重的性能问题。有一段时间,链接时间与编译时间相当,我们发现这很奇怪,我们实际上对此进行了调查并找出了它。

您可以尝试在链接之前将静态库合并为“超级对象”。而不是像这样链接:

$ g++ -o program program.o $STATIC_LIBS

你可以试试这个:

$ ld -r -o libraries.o --whole-archive $STATIC_LIBS
$ g++ -o program program.o libraries.o

请注意,此方法使链接器没有机会排除未使用的对象代码,因此您的二进制文件可能会稍微增加。

答案 1 :(得分:3)

创建一个ramdisk,编译到那个并链接到硬盘。

因为你使用了很多静态库,你可以创建一个包含所有thos库的巨型库,这样你就可以得到一个libray。从lib-list中删除所有库并添加巨型库。这样可以减少库的文件切换为1,并可以加快阅读操作。

答案 2 :(得分:2)

8秒非常快,除非你真的确定不应该花那么长时间。我有完成重新链接需要5-8分钟的项目,因为我们不会在发布版本上进行增量链接。您是否尝试过使用增量关联(如果您未使用-shared,则可以使用-i-r)?

答案 3 :(得分:2)

关闭整个程序优化(至少在开发期间)。使用p-impl减少依赖性。

答案 4 :(得分:0)

如何将调试版本编译为共享库?这将解决调试符号膨胀,因为导入库很小,有或没有调试信息。也许不是最好的解决方案,但我认为这会大大缩短链接时间......

答案 5 :(得分:0)

您可以尝试使用clang和lld。来自godot docs

您还可以使用Clang和LLD来构建Godot。这有两个方面 与默认的GCC + GNU ld设置相比:

与GNU ld或金币相比,LLD链接Godot的速度明显更快。这样可以缩短迭代时间。