我有一个项目需要大约8秒才能与g ++和ld链接。
它使用了一堆静态库,大部分代码都是c ++。
我对如何缩短链接时间的一般提示感兴趣。 从“不包括调试符号”到“使代码减少spagetti”的任何内容
答案 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的速度明显更快。这样可以缩短迭代时间。