VS+Qt应用开发-发布Release程序打包发布
当完成一个Qt应用程序开发,要将其打包发给别人或在另外一台设备上运行时,直接将exe可执行程序拷过去是不行的,会提示缺少各种文件或程序无法正常启动,如下图所示:
首先,在开发程序时最好将对应编译器的bin文件夹路径添加到系统变量中,如何添加参考我的另一篇文章:https://blog.csdn.net/qq_36170958/article/details/108679509
其实,将bin路径添加到环境变量中,程序运行时就可以自动去bin路径去寻找dll,我们可以发现bin目录确实是包含这些dll的。
添加好环境变量后,在自己的电脑上运行exe是没有问题的,但是到没有开发环境的电脑运行仍然会报错,参考以下的发布过程。
程序的发布
介绍使用Qt的windeployqt工具自动提取所需文件的方法。windeployqt可以理解为Windows Deployment Loader Qt的缩写。
使用windeployqt发布
-
找到Qt安装目录下对应编译器的bin文件路径,比如我的为:D:\QT\5.9\msvc2013_64\bin,可以发现此路径下有windeployqt程序;
-
按Win + R打开“运行”,输入cmd,回车进入命令提示符;
-
进入刚才找到的文件夹路径,输入命令:
cd /d D:\QT\5.9\msvc2013_64\bin
,回车;(为什么最好要做这一步请看文末的说明) -
在命令行输入命令:
windeployqt C:\Users\zh\Desktop\MyQtDemo\x64\Release
,回车,其中windeployqt后跟space(空格键),再跟exe所在的路径; -
回车后,可以发现开始自动复制文件,exe所在文件夹已经有了新文件;
-
此时已经完成,将exe所在的整个文件夹打包,双击exe即可打开可执行程序。
提取的部分文件说明
使用windeployqt命令自动提取的文件如下:
- iconengines: 和图标有关;
- imageformats: 如果程序中使用了png以外格式的文件,则需要此文件夹和对应的图片格式的dll,例如程序中只使用了bmp格式的图片,imageformats文件夹中只需保留qwbmp.dll;
- platforms: 和平台有关;
- translations: 和国际化翻译有关;
说明
为什么要先进入windeployqt所在的文件夹,先看看几种其他命令方式:
- 进入命令提示符后,输入语句有以下几种方式:
windeployqt C:\Users\zh\Desktop\MyQtDemo\x64\Release
cd /d C:\Users\zh\Desktop\MyQtDemo\x64\Release
windeployqt MyQtDemo.exe
我的可执行程序是64位Release版本的,但是此处复制的dll却是64位Debug版的,程序依然是无法运行的。这是因为我的电脑不仅安装了msvc2013编译器,还安装了其他版本的编译器,而其他编译器bin路径在msvc2013的bin路径的前面,解决方法是将系统环境变量中msvc2013的bin路径放到其他编译器路径的前面。