在Windows环境下两种编译工具生成出来可执行文件大小差异很大,谁能解释一下?

老翔 2012-08-22 04:35:13
新手问题
在Windows环境下两种编译工具生成出来可执行文件大小差异很大

源程序如下

#include <iostream>
using namespace std;
int main()
{
cout<<"hello ,world"<<endl;
return 0;
}


用 Dev-C++ 工具,它使用G++编译器,生成出来的文件是4兆左右。
用 VC++6或VC2005 工具,它用ml编辑器,生成出来的文件是400k左右。

谁能解释一下为什么?
难道G++编译器,不适合编译windows平台下使用的程序?
...全文
668 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]

你可以这样进行简单的比较

都切换到Release模式

或者使用命令行

g++ -O2 test.cpp -Wl,-s (-s会在Release模式中自动加入,-s相当于strip)


看你是什么样的程序,理论上应该比vc /MD产生的大,比/MT大也很正常,因为ld的链接消去还没移植到Windows平台(即使移植,也没Linux下效果那么好)

gcc还有sta……
[/Quote]

谢谢大侠。使用您的命令,使我的G++编译后程序大幅缩小了,现在只有500多k了。

要学习的东西还有很多啊。

谢谢其他各位前辈给我指导,谢谢大家,结贴了。
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:
引用 4 楼 的回复:
《Windows PE权威指南》

请问这个书里有介绍吗?搜索这本书,看似汇编方面的?能麻烦你赐教嘛?

这本书分析了可执行文件的具体格式。
不过楼主的问题的最佳答案应该是在5楼。
[/Quote]

明白了,我一定去研究一下。
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
影响控制台程序大小的因素
1.C运行库 和 C++运行库。 只使用CRT库 比 使用 iostream等c++标准库打很多
2.C运行库 和c++库 是动态库还是静态库。

mingw 大多 编译的的程序是静态库的,所以 c 程序 是64KB,c++使用标准库的是500多Kb
如果是 动态库,只要7Kb就可以了

静态库时,vc一般gcc小,因为 C运行库 和 C++运行库,在wi……
[/Quote]

呵呵,看得我比较晕。

其实我也觉得g++编译,可能就是静态链接库。
我想编译在这个exe文件里面肯定是这个<iostream>库文件,只是想不到尽会编译出到4兆左右的分量。

题外话:g++编译器有没有某种方法(某项参数),可以不采用静态库编译,而像VC一样采用系统自身的动态库来编译运行?
JinCraft 2012-08-23
  • 打赏
  • 举报
回复
gcc 版本3.4.2 比你的还老
franzhong 2012-08-23
  • 打赏
  • 举报
回复
windows添加了些自身特殊的东西
xunxun 2012-08-23
  • 打赏
  • 举报
回复
你可以这样进行简单的比较

都切换到Release模式

或者使用命令行

g++ -O2 test.cpp -Wl,-s (-s会在Release模式中自动加入,-s相当于strip)


看你是什么样的程序,理论上应该比vc /MD产生的大,比/MT大也很正常,因为ld的链接消去还没移植到Windows平台(即使移植,也没Linux下效果那么好)

gcc还有static链接和shared链接编译,所以大小也有很大区别
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
你连strip都没用就来比较,有啥意义
[/Quote]

对不起,影响你老人家视线了,请大师见谅。

笨人初学,两个编译器产生不同结果,所以才来此论坛请教各位前辈为我指点迷津。
xunxun 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 14 楼 的回复:
你的DEV cpp有问题吧。我玩dev cpp好几年了,几千行代码静态链接了好几个库的程序大小也不过四五百K,你的居然几兆。。。。。。

我想不是我的Dev-C++软件的问题,因为我直接使用 g++ -o hello.exe hello.cpp 这样生成的文件一样很大。

我觉得主要问题是编译器的环境参数可能设置问题,其次是编译器命令行选项使用不正确,最后当……
[/Quote]
你连strip都没用就来比较,有啥意义
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
没设置优化参数默认的直接编译,用命令行编译也一样 hello world绝对不会超过50K
[/Quote]
请问兄弟你的g++版本是多少版的?
xunxun 2012-08-23
  • 打赏
  • 举报
回复
编译开关不统一

crt实现不一样

gcc的链接器的链接消去功能暂时没有移植到Windows下


如果仅是纯win api程序,那么按照相同类似的编译链接开关,gcc产生的大小会大大低于vc产生的
JinCraft 2012-08-23
  • 打赏
  • 举报
回复
没设置优化参数默认的直接编译,用命令行编译也一样 hello world绝对不会超过50K
老翔 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
你的DEV cpp有问题吧。我玩dev cpp好几年了,几千行代码静态链接了好几个库的程序大小也不过四五百K,你的居然几兆。。。。。。
[/Quote]
我想不是我的Dev-C++软件的问题,因为我直接使用 g++ -o hello.exe hello.cpp 这样生成的文件一样很大。

我觉得主要问题是编译器的环境参数可能设置问题,其次是编译器命令行选项使用不正确,最后当然最不可能的就是G++编译器(版本:gcc version 4.6.1)的问题。

请问,你的Dev-C++里面“编译器选项”是怎样设置的,我看能参考一下不?
olderma 2012-08-23
  • 打赏
  • 举报
回复
用vs2010应该要更大的啊
JinCraft 2012-08-23
  • 打赏
  • 举报
回复
以前初学的时候用dev生成的exe都在四五十K左右、
然后换用VC的时候还抱怨怎么VC生成的exe都四五百K
JinCraft 2012-08-23
  • 打赏
  • 举报
回复
你的DEV cpp有问题吧。我玩dev cpp好几年了,几千行代码静态链接了好几个库的程序大小也不过四五百K,你的居然几兆。。。。。。
youkuxiaobin 2012-08-23
  • 打赏
  • 举报
回复
拿windbg看一下
line_us 2012-08-23
  • 打赏
  • 举报
回复
是不是微软那小子做了什么手脚
CCDDzclxy 2012-08-23
  • 打赏
  • 举报
回复
gcc 基本没怎么用过... 还是工具得使用方法啊,换了命令大小就正常多了
失散糖 2012-08-23
  • 打赏
  • 举报
回复
我用Dev-C++4.9.9.2,建立默认控制台工程,楼主的代码,生成exe大小463K,这算大还是算小啊

可是,它自带Examples里面的OpenGL的工程,编译出来只有27K,果然是因为C++下面的cout太占空间了
hongwenjun 2012-08-22
  • 打赏
  • 举报
回复
http://code.google.com/p/i18n-zh/downloads/list

这里现在的 gcc 编译器,是动态链接库 CRT 的,编译的 exe 只要 7KB
加载更多回复(10)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧