目录
Qt程序发布及打包,同时修改可执行文件的图标。本教程使用Qt自带的 windeployqt 工具外加Enigma Virtual Box打包工具。首先需要知道的是,Qt程序发布需要的程序是用 Release 方式编译的。下面看一下具体的操作。
改变exe的图标
1、下载一个.ico格式的图标(如:exe_ico.ico),将exe_ico.ico复制到工程目录下。
2、工程目录下新建一个空白txt文档,文档内添加如下内容
IDI_ICON1 ICON DISCARDABLE "exe_ico.ico"
3、将文档后缀修改为.rc(如:exe_ico.rc)
4、在工程的pro文件添加如下内容
RC_FILE = exe_ico.rc
另注:使用VS+Qt的开发方式:在编辑器上的项目目录(Resource Files)添加exe_ico.rc文件即可。
5、重新编译程序,即可发现生成的程序图标变成了exe_ico.ico
1、首先将Release方式生成的exe复制到一个单独的文件夹下,如E盘根文件下的demo文件夹内。
2、开始菜单找到Qt目录下的Qt 5.5 for Desktop (MinGW 4.9.2 32 bit)打开命令行;
3、命令行进入步骤1新建的demo目录内
4、输入windeployqt 项目名.exe(如windeployqt QtTest.exe)
5、进行到这,Qt程序所需要的库都添加完成。但是有一部分是用不到的,想删除的可以用程序依赖关系查看软件来查看哪些文件用不到,感兴趣的自己去百度吧。
或者 1、将Release方式生成的exe复制到一个单独的文件夹下,如D盘根文件下的D:\SW_DEV\QT\Release_exe_temp文件夹内。
2、打开命令行工具cmd,进入windeployqt.exe目录(C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin>windeployqt.exe),使用 windeployqt 对生成的exe 文件进行打配置动态库文件;
3、C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin>windeployqt.exe D:\SW_DEV\QT\Release_exe_temp\MODBUS.exe
安装Enigma virtual box工具(安装过程一直next就行)
Enigma virtual box官方链接:https://enigmaprotector.com/en/downloads.html
1、打开提前安装好的Enigma Virtual Box。具体操作如下:
2、如上图
1)浏览打开demo下的Test.exe文件
2)点击增加,选择递归添加文件,选中demo文件夹点击确定
3)点击文件选项,选中压缩文件
4)点击执行封包。
3、将封包后的程序复制到其他地方,打开测试,结束。
1. 之前打包很顺利,没有出现问题。这次换了一台电脑,就出现了问题:
打包完成后,程序无法运行,报错:
百度了一会儿,有人说是因为:
使用enigmavb打包程序时,包含的根目录应该与待封包的主程序同级目录,不然会报错Cannot load library QT5Core.dll
同样的程序,下图右边不报错,左边报错
我打包时不存在这个问题,还是会报错,所以不是这个原因;
最终确认是环境变量的问题:
因为安装QT时没有设置环境变量
开始-计算机-右键-属性-高级系统设置,高级选项卡-环境变量-系统变量
在系统变量里面找到Path,点击编辑,在弹出的对话框中点击新建,根据自己的QT安装位置,输入类似C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin,后一路点击确定即可。
设置完就可以运行了
2. 给到客户之后,反馈还是不行:
ps:之前我一直是在开发的电脑上调试的,问题1就处在那个时候,电脑有安装QT软件;问题2现在是客户的电脑,是没装过QT软件的;所以问题是:
把 Enigma Virtual Box
打包过的 exe 放到另一个电脑使用,打开exe会报错:cannot load library Qt5Core.dll
(而实际上使用 Enigma Virtual Box
打包时,已经包含了 Qt5Core.dll
库)
查了一下,原因是:
解决方法:
从 Qt5.12.0\5.12.0\mingw73_64\bin(版本不同目录不同) 目录下把这 libgcc_s_dw2-1.dll,libwinpthread.dll,libstdc++-6.dll 三个动态库拷贝过来,再使用Enigma Virtual Box 打包的exe就不会报错了。
修改前和修改后目录对比:
重新打包之后,果然可以运行了