目录
前言
软件发布后在其它电脑上运行时,可能会由于库或资源的缺失而导致程序无法启动。打包是软件成功上线的一个重要环节。本文将介绍如何使用Qt自带的打包工具“windeployqt”来完成这一使命。
本示例程序运行的软硬件环境如下:
主机环境:Windows 11 家庭中文版
开发工具:QtCreator-5.14.2
编译工具:MinGW 7.3.0 64-bit
一、打包的原理
Qt Creator默认以动态链接的方式生成可执行文件,需要搭配动态链接库才能运行。windeployqt根据当前的环境变量(PATH配置)的搜索路径,去查找应用程序所需要的库和资源,将其拷贝到可执行文件的目录中。
二、打包的方法
2.1 准备工作
1、创建一个文件夹(例如:Release),用来存放Qt源码编译后生成可执行文件;
2、可执行文件(例如:hello.exe),放置到Release文件夹下;
2.2 启动打包程序
以管理员身份,开始菜单中打开Qt命令行终端界面。
在Qt终端界面输入命令,启动windeployqt来执行打包任务。
C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\windeployqt.exe C:\Users\lingd\Desktop\Release\hello.exe --qmldir C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qml
在“Release”目录下,生成了许多动态链接库文件和数据文件,启动hello.exe来测试打包工作是否成功完成。
2.3 裁减文件
打包后,在“Release”目录下生成可执行文件所需的全部库和数据文件,文件太大,可根据实际情况进行裁减,保留可执行文件必须依赖的文件就行了。
三、避坑
1号坑:应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。
分析:使用了系统自带命令行终端(C:\Windows\System32\cmd.exe)来执行windeployqt打包,导致库版本拷贝错误。
解决办法:使用Qt的命令行终端执行发布命令
2号坑:重新发布后,文件没有更新。
分析:发布到应用程序文件夹中的文件默认不会被覆盖。
解决办法:执行windeployqt命令时带“--force”参数,强制覆盖已存在的文件。
C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\windeployqt.exe C:\Users\lingd\Desktop\Release\hello.exe --force --qmldir C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qml
总结
使用Qt自带的打包工具windeployqt,基本上解决了桌面客户端软件发布的后顾之忧,值得点赞!