目录
打包发布
[重点] 打包后,再简化打包(Windows端)
工具准备
下载Enigma Virtual Box,安装后,使用该工具(为了“简化打包”步骤):
点击Finish按钮,自动弹出Enigma Virtual Box窗口(或者点击EVB(Enigma Virtual Box)图标),为了后续操作,可以提前打开该软件!
1)Release构建生成的exe文件
打开Qt,载入LightUnitTest项目(或其他项目),然后按如图所示的那样操作,用Release构建运行项目,然后找“生成的Release目录里的release目录”下的.exe文件,并拷贝,放入D盘下的test文件夹中(或,随便放入空文件夹中):
PS:
拷贝到test文件夹后,该exe文件名称可修改!必须进行“2)通过Qt5.8 for Desktop程序获取库文件”之前修改!
2)通过Qt5.8 for Desktop程序获取库文件
达成的目的:拷贝整个目录到其他电脑运行成功!!!
打开Windows的所有程序中的Qt的Qt5.8 for Desktop窗口,先输入“cd /d D:\test”,来到test目录(或对应的目录),再输入“windeployqt LightUnifTest.exe(即 windeployqt xxx.exe)”,用windeployqt工具将.exe需要使用Qt的dll文件或文件夹都拷贝到test目录中,与.exe文件是同级关系(其中,translations目录、iconengines目录、imageformats目录,不需要的话,可以删除;当然,platforms文件夹很重要,不可以删除):
【以下是指令的打印结果,没有出现任何errorOrexception】
D:\test\LightUnifTest.exe 32 bit, releas
Adding Qt5Svg for qsvgicon.dll
Skipping plugin qtvirtualkeyboardplugin.
Direct dependencies: Qt5Core Qt5Gui Qt5W
All dependencies : Qt5Core Qt5Gui Qt5W
To be deployed : Qt5Core Qt5Gui Qt5S
Qt5Core.dll is up to date.
Qt5Gui.dll is up to date.
Qt5Svg.dll is up to date.
Qt5Widgets.dll is up to date.
libGLESV2.dll is up to date.
libEGL.dll is up to date.
D3Dcompiler_47.dll is up to date.
opengl32sw.dll is up to date.
Updating libgcc_s_dw2-1.dll.
Updating libstdc++-6.dll.
Updating libwinpthread-1.dll.
Patching Qt5Core.dll...
qsvgicon.dll is up to date.
qgif.dll is up to date.
qicns.dll is up to date.
qico.dll is up to date.
qjpeg.dll is up to date.
qsvg.dll is up to date.
qtga.dll is up to date.
qtiff.dll is up to date.
qwbmp.dll is up to date.
qwebp.dll is up to date.
qwindows.dll is up to date.
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_de.qm...
Creating qt_en.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_he.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_pl.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...
这时候,已完成第一步“打包”步骤,但是一整个“test文件夹”考到其他电脑去,显得麻烦,生怕拷贝少了东西!!!
所以需要进行第二步“简化打包”。
3)简化打包
达成的目的:拷贝一个简化打包的.exe文件到其他电脑运行成功!!!
打开Enigma Virtual Box软件,点击Browse按钮,导入或选择要打包压缩的.exe文件(LightUnifTest.exe 或 xxx.exe),并点击打开按钮,然后“Enter Input File Name”第一个输入框中出现导入的文件及路径,而“Enter Output File Name”第二个输入框会自动生成“xxx_boxed.exe文件名及路径”:
再点击Add按钮,选择Add File(s)项,弹出文件管理器,全中所有文件(选到了文件夹也没有关系,Enigma Virtual Box软件只显示文件部分,而【e.g.】platforms文件夹,在这些dll同级处(即%DEFAULT FOLDER%里),要自己新建文件夹New Folder——取名为platforms——在该文件夹里添加platforms文件夹中的文件【比如:qwindows.dll】),
点击打开按钮,
接着弹出一个Select Folder窗口,选择OK按钮(若已有该目录,则不会弹出Select Folder该窗口),然后在程序的Files中显示:
若有文件夹,请如下图这样做,否则将最终的“xxx_boxed.exe”放入其他电脑中运行,会弹出错误警告(错误 This application failed to start because it could not find or load the Qt platform plugin “windows”)!
确保所有文件、文件夹都添加了,
之后,选择Files Options按钮,弹出的窗口要勾选“Compress Files压缩多个文件”,然后选择OK按钮,该窗口消失;
接着选择程序中的Process按钮,压缩成功,生成了xxx_boxed.exe(该文件位置与xxx.exe文件同级),接着可以直接选择Close按钮关闭Process窗口,最后,将“LightUnifTest_boxed.exe”拷贝至另一台电脑,运行正常:
改exe文件名
文件名可以修改,前提是,必须在2)通过Qt5.8 for Desktop程序获取库文件操作之前,把exe文件原名改掉,这样,到了该操作时,就不会出现如下图所呈现的问题了(“Input file does not exist!”):
第二个输入框可改路径
输出“简化打包后的exe文件”的路径,可以自定义,默认出现在“导入的exe文件”所在的同一个目录里。
延伸-分析
声明
Windows端
- 用Qt for Desktop窗口进行windeployqt处理
- 【拷贝整个目录到其他电脑运行成功】
- 打包后,再简化打包
- 【拷贝一个简化打包的.exe文件到其他电脑运行成功】
Linux端
若你在Linux端,只要打开终端 输入:qmake–>make clean–>make,编译产生的.exe可以在开发板子上使用,但是,你将编译后的.exe文件移到Windows端,将无法使用【因为Linux识别的.exe可执行文件要用AptURL工具,而Windows端中没有该工具】!!!
解决:
只能将Linux端开发的Qt项目拷贝一份至Windows端,换MinGW编译器(环境配置),然后重复Windows端打包发布步骤!
为什么要打包发布
Windows端
移植Debug目录下或Release目录下的.exe文件至其他电脑,在没安装Qt的情况下,双击.exe文件,会弹出这样的警告窗口:
为了解决这个“系统错误”,有两种方法:
【1】:在对应电脑下载Qt
【2】:打包发布
分析:
【1】—> 可行,但,难道每次移植其他电脑都要安装Qt,操作很繁琐、不方便,为什么不能实现“一移植即可运行”???
【2】—> 可行,只需要在移植前,做繁琐操作,若移植至其他电脑,可实现“一移植即可运行”。
总结:要打包发布.exe文件!!!
手误,用CMD进行windeployqt处理
还没看清楚步骤,我就急着用管理员身份打开了CMD,用“windeployqt LightUnifTest.exe”【以下是指令的打印结果,请注意,其中出现该异常“Warning: Cannot find GCC installation directory. g++.exe must be in the path.”】
D:\test\LightUnifTest.exe 32 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies.
Direct dependencies: Qt5Core Qt5Gui Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5Svg Qt5Widgets
Warning: Cannot find GCC installation directory. g++.exe must be in the path.
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Updating libGLESV2.dll.
Updating libEGL.dll.
Updating D3Dcompiler_47.dll.
Updating opengl32sw.dll.
Patching Qt5Core.dll...
Creating directory D:/test/iconengines.
Updating qsvgicon.dll.
Creating directory D:/test/imageformats.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
Updating qjpeg.dll.
Updating qsvg.dll.
Updating qtga.dll.
Updating qtiff.dll.
Updating qwbmp.dll.
Updating qwebp.dll.
Creating directory D:/test/platforms.
Updating qwindows.dll.
Creating D:\test\translations...
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_de.qm...
Creating qt_en.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_he.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_pl.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...
我并没在意打印结果有没有出现errorOrexception,我拷贝test目录,换台电脑双击打开.exe文件,弹出如图所示的“系统错误”提示框:
解决问题 或 用Qt for Desktop窗口进行windeployqt打包
按照“[重点] 打包后,再简化打包(Windows端)”里面讲述的前两个步骤进行操作,就可以解决这些问题:
1.Warning: Cannot find GCC installation directory. g++.exe must be in the path.
2.丢失libstdc+±6.dll、libgcc_s_dw2-1.dll、libwinpthread-1.dll的系统错误
而
问题解决的重要步骤就是:不是用CMD程序,而是用Qt自带的Qt for Desktop程序
又遇错误 This application failed to start because it could not find or load the Qt platform plugin “windows”
这是添加不全面导致的问题:
问题分析:
缺少了platforms目录的qwindows.dll文件;
解决:
打开Enigma Virtual Box软件,按照 [重点]打包后,再简化打包(Windows端) 所讲述的步骤,
Add File(s)添加文件【platforms目录的文件一定要添加,其他三个可以不添加(特别是translations目录,不需要的话,可以删除),但我都添加了!以防万一嘛~】,最后点击Process按钮,生成LightUnifTest_boxed.exe,再次移到其他电脑,运行正常:
注:要在%DEFAULT FOLDER%里新建platforms目录,并添加qwindows.dll文件,最后
才!可!以!点击Process按钮!!!
未简化打包,双击目录里的exe后报错This application failed to start because not Qt platform plugin could be initialized
前提:
确定使用Qt开发,
确定是用Qt5.12.0版本开发,
PS:
解决办法必须在与exe文件相同Qt版本下进行!
问题分析:
缺Qt的platform相关的库包,
解决:
将Qt目录下plugin文件夹中的platforms文件夹直接复制到项目.exe的运行目录下!
确定用哪个Kits构建环境,则拷贝对应Kits工具的plugin文件夹中一整个platforms文件夹到.exe的同级位置;
不确定用哪个Kits构建环境,就只能一个一个试,拷了一个双击exe文件,报错就换下一个,反复进行,一定有个能成功!
-
参考:
- QT的程序打包发布(将QT5的工程项目打包成一个可直接运行的exe程序)【讲解:Qt Widgets Application(正常qt/c++项目)与Qt Quick Application(qml项目)两种打包方式】
- QT windows 下生成可执行程序【用 打包工具 Engima Virtual Box将windeployqt处理后的目录再次处理,生成一个.exe(不需要任何的.dll文件)】
- qt打包发布【详细图步骤】
- 怎样解决Qt编译出的程序运行时缺少libgcc_s_dw2-1.dll 文件的问题?【文章表达的是:通过“配置Qt5.8的bin目录至环境变量”来解决问题,但实际上我的“系统错误”不是“因忘记配置环境变量”导致的!所以对我目前的错误是无效方法。】
- 找不到libgcc_s_dw2-1.dll, 尝试重新安装该程序以解决问题.【文章表达的是:配置环境变量可以解决(这个对我的不可行,上面已说),但使用另外方法:从网上下载对应dll,其实做了无用功。】
- This application failed to start because it could not find or load the Qt platforms plugins【里面的解决方案我并没有尝试,但是告诉我了,该错误是因为没有了platforms目录的qwindows.dll文件!】
- 解决Qt This application failed to start because no Qt platform plugin could be initialized问题【里面的解决方案,第二个方案正合适!】