我正在试图弄清楚如何缩小在最新的QT SDK(4.8.2)(基于mingw/g ++)下编译的EXE文件的大小.我正在开发一个vanilla c ++控制台应用程序,它有一个简单的循环,只有#includes iostream,当我注意到它生成的exe大约是465kb; 比他们应该更大的方式!注释掉所有流的内容会将其降低到预期的5kb范围(尽管剩下的代码大部分已经死了).这似乎根本不对,特别是因为我正在研究的另一个完整项目有一个QGLwidget,窗口,十几个数据结构和~3000个语句,只有大约126Kb的时钟.我缺少一些设置或标志吗?这是.pro,而cpp是微不足道的,没有Qt(基本上是getline和cout,有六个char交换):
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
QMAKE_CXXFLAGS_RELEASE += -O2
QMAKE_CXXFLAGS_RELEASE += -Os
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些其他配置,它肯定在发布模式下编译(调试> 3Mb),但我无法弄清楚为什么它如此臃肿.
我也查看了PE头,我看到它从libgcc_s_dw2-1.dll和mingwm10.dll导入了一些函数,如果我能完全消除这些依赖关系,那将是很好的,特别是因为它们都不应该无论如何都要求.我可以通过添加QMAKE_LFLAGS_RELEASE += -static到.pro 来使libgcc消失(以17kb的exe大小为代价),但mingwm10.dll保持不变,调用单个函数.
基于整体膨胀,以及编译器试图潜入的所有无用的框架内容(至少在网络中).我猜这只是几个设置的问题,特别是对于一些默认的编译器标志,如-DQT_LARGEFILE_SUPPORT或-mthreads.这是编译输出(为强调添加了项目符号):