与VS6相比,VS2008 C ++编译中的巨大OBJ文件

时间:2012-07-12 17:09:00

标签: c++ visual-studio-2008 object size

我们有一个大型项目,在大约300个DLL中有> 1M行代码。 到目前为止,我们一直在使用VS6。

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

==>但是......生成的编译后的OBJ文件大了X 10,链接速度非常慢,链接器经常会占用> 1GB的内存。

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

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

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

任何人都有任何想法?或者是我唯一的选择将项目分解成更小的单位?重构我唯一的希望吗?!当然,我错过了一个秘密的旗帜......

<小时/> Edit1(13/07/2012 12:20BST) 我比较了VS6与VS2008创建的Obj的dumpbin。 2008年中的那个似乎是“静态链接”。在VS6中,它包含来自当前DLL的几个符号。在VS2008中,它包含来自(可能)所依赖的所有库的符号。 VS6和VS2008的Dumpbin尺寸分别为66kb和32,000kb。


1 个答案:

答案 0 :(得分:5)

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

编译器选项/Oi可能有助于内联函数,然后不再需要链接。无论如何,您可能不想调试memset

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