QT5生成可执行文件总结

转载 2018年04月17日 00:10:05

转载自:https://blog.csdn.net/helaisun/article/details/51810082


环境: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本身的原因吧!



Qt生成exe文件上贴图 Qt5.5 on Android 可执行程序贴图

首先准备个ICO图标。例如:A.ico,网上有很多图标文件。 用记事本新建个txt(//注意顺序:先建一个txt,写好语句后再修改文件后缀名) 里面就写一行: IDI_ICON1  ICON  ...
  • qq_17242957
  • qq_17242957
  • 2015-09-09 16:28:38
  • 579

QT 5.3 应用程序打包成可执行程序exe

众所周知QT编译好的应用程序依赖很多动态链接库,不能方便的在其他PC上使用。这里介绍QT5版本的应用程序打包成可执行EXE的方法。 首先把QT应用程序项目编译成Release版本,而不是Debug版...
  • u012246376
  • u012246376
  • 2017-01-15 12:21:04
  • 3319

Linux Qt程序打包成一个可执行文件

最近用Qt写了一个上位机, 而且是跨平台(Windows, Linux, ARM-Linux), 开发完成后需要对程序进行打包, windows的打包非常容易,选择非常多, 但是linux下面的选择就...
  • sy373466062
  • sy373466062
  • 2017-06-20 11:38:02
  • 3482

QT下生成可执行程序的方法及一些问题解决办法:

QT下生成可执行程序的方法及一些问题解决办法
  • weiwen12138
  • weiwen12138
  • 2017-04-28 22:02:31
  • 309

QT5程序发布--打包可执行文件和动态链接库

到了QT最后的程序发布阶段,QT5.5已经提供windows操作系统下程序打包工具,这个工具在安装目录D:\Qt\Qt5.5.0\5.5\mingw492_32\bin路径下,需要在控制台操作,所以首...
  • zhouguoqionghai
  • zhouguoqionghai
  • 2015-10-25 11:38:46
  • 7826

QT关于生成可执行文件exe

用Qt Creator编译的程序,在其工程文件夹下会有一个debug文件夹,其中有程序的.exe可执行文件。但Qt Creator默认是用动态链接的,就是可执行程序在运行时需要相应的.dll文件。...
  • u013256831
  • u013256831
  • 2014-06-20 15:21:50
  • 2919

Makefile编写实例(生成可执行文件)

CC = gcc XX = g++ CFLAGS = -Wall -O -g TARGET = ./msgsql_rpc_server PROTOBUF_INC=/usr/local/shipu/md...
  • u012592062
  • u012592062
  • 2016-12-15 18:21:15
  • 488

Matlab 生成可执行文件

相信很多用Matlbab开发的同学们都对Matlab强大的工具包所吸引,但是并不是所以环境都支持对M文件运行,在没有安装Matlab的电脑上我们该如何M文件进行运算呢。首选当然是把M文件导出成一个可在...
  • duck_arrow
  • duck_arrow
  • 2012-12-11 09:12:33
  • 5823

Qt5.8 linux程序打包发布

转自:http://blog.csdn.net/hjl_1991/article/details/50365927 为便于描述,我们这里假设生成的程序名称为test(即要发布的程序名称)1. QtC...
  • why19940926
  • why19940926
  • 2017-07-26 21:23:45
  • 1301

GCC从源文件如何蜕变成可执行文件

GCC的编译过程 一、预处理: 对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程,即进行头文件的展开,宏替换,条件编译 如以下的一段简单程序: #include int main(...
  • zscfa
  • zscfa
  • 2016-07-06 20:38:12
  • 642
收藏助手
不良信息举报
您举报文章:QT5生成可执行文件总结
举报原因:
原因补充:

(最多只允许输入30个字)