10

我们有一个大型项目,大约 300 个 DLL 中有超过 100 万行代码。到目前为止,我们一直在使用 VS6。

我现在已经将所有内容都转换为 VS2008,所有编译、链接,更重要的是 - 运行!

==>但是...生成的编译后的 OBJ 文件要大 10 倍,并且链接非常慢,链接器经常会达到 >1GB 的内存。

部分含义是我需要用 /bigobj 编译某些项目。

结果是从桌面上的大约 1:45 到 3h 的构建。DLL 和 LIB 的大小与旧 VS6 版本中的大小大致相同。

我已经阅读了所有可以在这里找到的内容,但没有找到解决此问题的方法。如果它是额外的调试信息 - 我不想要它。我以前受够了。释放的大小增加了,但没有那么多......

有人有什么想法吗?还是我唯一的选择是将项目分解成更小的单元?重构是我唯一的希望吗?!当然,我错过了一个秘密标志......


Edit1 (13/07/2012 12:20BST) 我比较了 VS6 与 VS2008 创建的 Obj 的垃圾箱。2008 年的那个看起来好像是“静态链接”。在 VS6 中,它包含一些来自当前 DLL 的符号。在 VS2008 中,它包含来自(可能)它所依赖的所有库的符号。VS6 和 VS2008 的垃圾箱大小分别为 66kb 和 32,000kb。


4

1 回答 1

5

检查您的调试选项。/Z7导致大的 .OBJ 文件,/Zi将相同的信息放在单独的 .PDB 文件中。

编译器选项/Oi可以通过内联内在函数来提供帮助,然后不再需要链接。memset无论如何,您可能不想调试。

关闭/Gm(增量重建),以便您可以打开/MP(并行构建)。也关闭/Gy- 虽然它可以生成更小的 EXE,但它会导致更大的 OBJ 文件和更慢的链接。

于 2012-07-12T18:17:41.137 回答