QT5生成可执行文件总结

Posted Frey_Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT5生成可执行文件总结相关的知识,希望对你有一定的参考价值。

环境:win7 32位 运行Qt5.6 

所需外部软件:upx391w,Enigma virtual Box

以样例的形式说明如下:

1.利用QtCreator打开项目release生成项目可执行文件,注意这时生成的 *.exe文件是不能执行的,需要很多外部.dll文件,debug方式生成的文件有1.8M大。


2.提取ButtonTest5.exe运行所需要的dll文件。

如在F盘新建一个button文件夹,将ButtonTest5.exe复制到button文件夹中,启用Qt自带的windeployqt,将ButtonTest5.exe运行需要关联的dll文件拷贝到F 盘的button文件夹中,方法如下(参考:http://blog.csdn.net/syrchina/article/details/50663337):

在开始菜单找到Qt 5.6 for Desktop (MinGW 4.9.2 32 bit),运行打开Qt命令行,如下图。


针对F盘下的button文件夹,输入命令行: cd /d F:\\button,切换到button文件夹目录下,

然后使用windeployqt工具, 再次输入命令行;windeployqt  ButtonTest5.exe,就可以执行拷贝ButtonTest.exe文件关联的dll文件到button目录下面了,再看看F盘下的button文件夹,所需要的dll文件都已经拷贝进去了,如下图。


可以打开button文件夹,里面的ButtonTest5.exe可以运行了,此时button文件夹的总大小约39.7M,


3.使用Enigma virtual Box将ButtonTest5.exe文件及需要关联的dll文件生成单个可执行文件

运行提前安装好的Enigma virtual Box,"Input File Name"项选择可执行文件ButtonTest5.exe,“Enter Output File Name”选择待生成的单个可执行文件存放位置。点击“Add...”选择“Add Folder Recursive”添加dll文件所在的文件夹,选择F盘下的button文件夹。



点击"File Options"按钮,设置文件选项如上图,点击“OK”,最后一步是点击"Process",即可自动生成所需的单个可执行文件。生成的单个可执行文件有15.6M大小,如下图。


如果对生成的exe大小比较满意,到此就可以结束了。

如果是不想制作成单个可执行文件,而只是想以一个文件夹的方式(即:dll文件+ButtonTest.exe),显然,39M的大小是不能令人满意的,我们需要upx391w对dll文件进行无损压缩。

4.使用upx391w对dll文件进行压缩

upx391w(下载地址:http://upx.sourceforge.net/),在使用upx压缩前我们复制一份button文件夹,取名为button_1,方便对比。

下载upx391w,并将其解压到C盘下面(注:不知道为什么我放到F盘下没法正常使用,可能是系统命令行的原因吧!)

运行电脑的命令行,输入 cd C:\\upx391w  

再次输入命令行: upx.exe   F:\\button_1\\*dll

这样就能将button_1下的所有dll文件进行压缩了,下图可以看出压缩后的文件比压缩前的文件小一倍,



当然你也可以如法炮制对iconengines等文件夹下的dll文件进行压缩,当所有dll文件都压缩完后,整个button_1文件夹的大小变为15.2M了,和上一步骤生成的单个可执行文件大小差不多了,比原来的39M小了一倍多。


但是,会发现不能对platforms文件夹中的dll文件进行压缩,否则button_1文件夹下的ButtonTest5.exe不能正常运行了,出现如下图示错误。所以在压缩dll文件时不要对platforms文件夹内的dll文件进行压缩,将platforms文件夹内的dll文件换回来就可以正常运行了。


这时你还可以仿照步骤3,用Enigma virtual Box将button_1文件夹内的ButtonTest5.exe进行制作成单个可执行文件。将生成的单个可执行文件命名为ButtonTest5_boxed11.exe,发现制作后的可执行文件大小为14.1M,相比较未压缩dll文件制作的单个可执行文件15.6M小了一些。



另外,网上也有不少文章(如:http://blog.csdn.net/gzshun/article/details/7495488)介绍hap-depends + ASpack + filepack方法生成可执行文件的,自己尝试用ASpack对button文件内的dll文件进行压缩,结果生成的.bak文件反而更大,如下图示,不知道是使用方法不对还是下载的软件有问题。尝试filepack封包结果也是不行,当然,很可能是自己使用不当的原因。



写到这里,将自己写的Qt测试小程序生成单个或者是简单压缩以单个文件夹的形式使用基本可以满足需要了。

最后仍有很多不懂的东西,比如生成的单个可执行文件BottonTest5_boxed11.exe运行起来,通过Process Explorer软件查看内存占用比程序本身还大,可能是Qt本身的原因吧!