这是我的第一个问题,我是一个大粉丝,在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
知道为什么尺寸存在很大差异?
谢谢。
答案 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)
由于:
/M
系列选项。在IDE中的某个位置,转到测试项目的属性。打开配置属性 - > C / C ++ - > 命令行和配置属性 - > 链接器 - > 命令行。这将显示IDE调用编译器和链接器的所有选项。
IDE使用如此多的选项这一事实应该告诉您它没有使用工具的默认值。
如果您转到命令行并使用IDE中显示的相同选项调用编译器和链接器,则生成的可执行文件应该100%相同。