最近一直在使用 Qt
写一个简单的可用的界面,由于实际需要,待所有的程序功能基本都实现完成之后,就需要对程序进行打包,从而达到在所有的电脑上不需要下载各种依赖库就可以运行的版本,也就是一个可执行文件。之前没有接触过程序的打包,现在记录一下成功的案例。
对 Qt
也能够用程序来说,一般需要三步:
- 生成
release
版本的可执行文件.exe
; - 找到所有的动态链接库
dll
; - 将所有的
dll
以及依赖的各种文件和可执行文件打包在一起生成最终的一个可执行文件。
1. 生成 release版本exe
其实这个不难,只要将 VS
下的 Debug
模式改为 Release
模式即可,需要注意的是要将 Release
版本属性配置正确,肯定要配置正确,否则编译运行都会有村务,也生成不了可执行文件,需要配置的主要是 包含目录、库目录以及 链接器输入。 一旦配置正确然后重新运行就会在工作目录下的 x64
或者是 x32
的生成一个 release
文件夹,在该文件夹下会看到 release
版本的可执行文件以及一些依赖库文件等等。
2. 使用自带的 windeployqt 打包
将上一步的 release
文件夹下可执行文件拷贝出来放在一个单独的文件夹下(文件夹最好不要使用中文名),比如这里我放在 d:/exeDemo
这个文件夹中。
然后使用 Qt5
自带的打包工具 windeployqt
打包:
- 进入
d:/exeDemo
,也就是刚才创建的放置可执行文件的目录; - 打开
DOS
窗口并进入该目录中:d:
->cd exeDemo
; - 输入命令:
windeployqt QtRegister.exe
,这一步的目的是将需要的库文件自动的全都拷贝到exe
当前文件夹中,不用自己一个一个的添加进文件夹中。
最后进入该文件夹中可以看到多了很多的东西,这就是 windeployqt
工具自动为我们找到的我们可执行程序运行所需要的所有 Qt
动态链接库:
但是在使用 windeployqt
后还存在一个问题,如果我们在编写程序的时候不仅使用了 Qt
的库,还使用了其他的第三方库,比如 OpenCV
的话,windeployqt
是无法为我们自动添加的,需要我们自己手动将动态链接库复制到该文件下,比如我这里需要的 opencv_world420.dll
等等其他库文件,最后这个文件夹下就有很多的文件:
可以尝试在该文件夹下打开可执行文件,看是不是会提示缺少其他的 dll
,如果有的话就自己慢慢找,然后添加到该文件夹下就可以了。总之就是想法设法的找到运行依赖库即可,直到可以正确打开可执行文件为止。
3. 使用Enigma Virtual Box
通过第二步我们已经生成了可以跨平台运行的可执行文件,只要将整个文件夹复制到其他人的电脑上即可运行,但是毕竟这么一大堆文件,而且还是一个文件夹,如果程序写的稍微大一点的话动辄就要拷贝几个 G
的文件夹 , 显得有点麻烦,也不符合我们的日常的操作,要是能做成就只有一个可执行文件就好了。
现在我们就可以使用 Enigma Virtual Box
这个工具了,Enigma
将一大堆的文件都打包在一起生成一个最终的可执行文件,并且可以压缩体积,而且压缩结果非常乐观。
使用 Enigma
方法:
首先肯定需要我们下载 Enigma Virtual Box
。直接百度进入 Enigma
官网下载即可(免费):Enigma Virtual Box 官网,下载完成后很简单的就可以安装好,这里就不介绍如何安装了,下面是安装后打开的界面,露个脸:
1.打开后,选择我们想要打包的可执行文件以及最后生成的可执行文件名(可以更改):
2.然后添加其他的文件,需要注意的是,在 Add
文件的时候一定要选择第二项,不要选择第一项:
3.在弹出的对话框中选择我们新创建的文件夹(直接选择整个文件夹即可)
4.点击 OK
:
5.然后我们就可以看到该文件夹下所有的需要和可执行文件打包在一起的所有文件, 然后点击右下角的 Protect
按钮就开始打包了:
6.打包中:
7.等程序运行完成后我们就可以在新建的文件夹下看到新生成一个可执行文件,名字为原来的可执行程序名加上了 protected
(当然,这个名字在第二步是可以改的):
这里的 QtRegister_protected.exe
就是可以移植的可执行文件,理论上是放到任何人的电脑上都可以执行,不管有没有下载 Qt
和 OpenCV
等等库都可以直接运行。
至此我们从 Qt
程序的生成以及最后的程序打包就已经完成了!
每天进步一点点!