缓慢的连接阶段

时间:2014-10-26 19:31:19

标签: c++ compilation linker precompiled-headers

好的,我在这里遇到了一个非常意外的行为。使用中等大小的遗留代码项目我注意到编译是不合理的慢。使用预编译的头,但它的用处是有问题的。无论如何,它很好用我决定在发布模式下构建项目。编译持续约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文件会导致这种缓慢的链接吗?
  • 可以在预编译的make编译和链接中添加更多标题吗?
  • 我还应该尝试什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

显然gcc编译器以不同的方式处理“prefix”头文件vc ++处理预编译头文件。就像我想的那样,为预编译添加更多标题会将其大小增加到近500 MB,但生成的目标文件变得更小,编译/链接变得更快(虽然链接持续时间现在大约2-3分钟,这不是最佳但不是很糟糕和以前一样)。