好的,我在这里有一个非常意外的行为我注意到使用中等大小的遗留代码项目时,编译的速度很慢。使用了预编译的头,但是它的有用性值得怀疑。无论如何,这很好,我决定以发布模式构建项目。编译持续了大约1.5个小时,然后是链接阶段:〜2小时,链接器使用的总RAM约为1.3 GB。查看生成的* .obj文件,您可以说出错了-尽管实际处理的文件相对较小,但是它们的大小从20到50 MB不等。
详细的链接器输出内容不多:

Starting pass 1
Processed /DEFAULTLIB:msvcprt
Processed /DEFAULTLIB:uuid.lib
Processed /DEFAULTLIB:OLDNAMES
*prints nothing for a long time*
Processed /DEFAULTLIB:ws2_32.lib
Processed /DEFAULTLIB:mswsock.lib
*prints nothing for an hour*
...


所以我有几个问题:


大型* .obj文件会导致这种缓慢的链接吗?
可以在预编译中添加更多标头使编译和链接速度更快吗?
我还应该尝试什么?


任何帮助将不胜感激。

最佳答案

显然,gcc编译器以vc ++对待预编译头的不同方式对待“前缀”头。就像我想的那样,在预编译中添加更多的标头将其大小增加到将近500 MB,但是生成的目标文件变得更小,并且编译/链接变得更快(尽管链接持续时间现在约为2-3分钟,这不是最佳选择,但还不算太糟)像之前一样)。

关于c++ - 慢速连结阶段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26577024/

10-13 04:13