使用Visual C ++ Express 2010 IDE进行编译并使用cl命令在控制台下编译时,不同的exe大小

时间:2014-08-22 17:12:42

标签: c++ c ide

这是我的第一个问题,我是一个大粉丝,在stackoverflow中找到了很多解决方案,非常感谢所有人。如果我的问题值得花时间,我会很高兴。

我使用的是Windows 7和Microsft Visual C ++ 2010 Express。 C代码是:

int main()
{
    return 0;
}

使用ide编译代码时,使用项目属性 - > C / C ++ - > CodeGeneration - >运行时库= / MTd选项exe大小为395,264字节。 使用Visual Studio命令提示符使用cl.exe在控制台下编译程序时 " cl test.c" exe大小为31,744。

大小: 1. 395,264 2. 31,744

知道为什么尺寸存在很大差异?

谢谢。

2 个答案:

答案 0 :(得分:2)

使用/MTd选项在VS中进行编译正在使用最终可执行文件中的多线程调试库构建程序,这将导致二进制文件的大小增加以用于那些额外的对象。

源文件的编译命令不会导致链接任何其他对象代码,并且会导致更小的exe。

有关详细信息,请参阅this page

当我使用相同的源代码时,使用相同的编译器选项,我的最终大小为391K。 从命令行,我得到以下内容:

cl MyProg.cpp -> 31K
cl /MTd MyProg.cpp -> 137K

如果您包含IDE包含的其他一些选项,那么您可以得到以下内容:

cl /MTd /Gm /ZI /EHsc MyProg.cpp -> 378K

这只是造成你们差异的构建命令之间差异的问题。

答案 1 :(得分:2)

由于:

  1. 还有更多VC ++编译器选项,而不仅仅是/M系列选项。
  2. 其中一些选项会影响可执行文件的大小。
  3. 新项目的IDE默认值与编译器和链接器本身的默认值不同。
  4. 在IDE中的某个位置,转到测试项目的属性。打开配置属性 - > C / C ++ - > 命令行配置属性 - > 链接器 - > 命令行。这将显示IDE调用编译器和链接器的所有选项。

    IDE使用如此多的选项这一事实应该告诉您它没有使用工具的默认值。

    如果您转到命令行并使用IDE中显示的相同选项调用编译器和链接器,则生成的可执行文件应该100%相同。