昨天发现Qt发布了4.6.1,于是决定用VC2008编译一个Qt的纯静态版本:不依赖VC运行库(/MT),也不依赖Qt运行库。
研究了一下,在不增加任何第三方库的情况下,方法如下。
增加环境变量:
QTDIR=D:\qt-everywhere-opensource-src-4.6.1
PATH=%QTDIR%;%PATH%
静态CRT:
mkspecs目录,找到 win32-msvc2008 目录,编辑qmake.conf,将QMAKE_CFLAGS_XXXXXXX全改成静态。就是把MD改成MT,把MDd改成MTd。
配置:
configure -prefix D:\Qt461 -debug-and-release -platform win32-msvc2008 -static -fast -opensource -no-exceptions -no-dsp -no-vcproj -no-qt3support -no-accessibility -no-rtti -no-opengl -no-gif -qt-libpng -qt-libjpeg -no-libmng -no-libtiff -no-zlib -no-webkit -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-declarative -no-script -no-scripttools -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -qt-style-windowsxp -qt-style-windowsvista -nomake examples -nomake docs -nomake demos -nomake translations
编译:nmake
安装:nmake install
之后又编译了demo,想看看效果。于是进入demos目录,执行:nmake release
编译后,Release版本,最小的EXE大小是:4.5MB,最大的EXE大小是:5.8MB。比用MinGW 4.4编译的尺寸要小2-3MB。
然后用Upx压缩,默认参数的情况下,Upx压缩率可以达到40%左右。压缩后的最小demo是2MB,最大的是2.4MB。
没有压缩release版本:
程序尺寸: 5.44 MB
内存占用:
第一次运行: 10496 K 4984 K
最小化后: 1100 K 4984 K
恢复窗口: 6476 K 4988 K
再次最小化: 1092 K 4988 K
upx默认参数压缩后:
程序尺寸: 2.28MB
内存占用:
第一次运行: 13268 K 10548 K
最小化后: 1116 K 10548 K
恢复窗口: 6532 K 10548 K
再次最小化: 1104 K 10548 K
我的问题是:为什么Upx压缩后,内存占用会升高?尤其是虚拟内存,竟然增大了2倍多!
后记:编译安装到D:/Qt461目录后,整个目录469MB,其中bin目录72.2MB,include目录7.85MB,lib目录380MB,plugins目录7.86MB。
看来没有传说中的那么大体积。
默认安装后,不会将pdb文件拷贝到安装目录中,这样调试时将无法进入Qt的源码,不过这并不成问题,毕竟大家只是Qt的使用者,而不是开发者。