win10系统、MSVC2017(64bit)、Qt Widgets Application项目
1.windeployqt:qt自带打包工具,通过命令行使用,用于搜集所需要的dll 2.360任务管理器:用于查找windeployqt不能自动搜集的dll,手动添加 3.enigma virtual box:用于将配置好dll以及各种资源的项目文件夹打包成exe 百度云盘链接 提取码:fwzn
首先用QtCreator打开自己的项目,选择Release方式(默认是Debug),再构建,再运行。(可能直接运行也行,个人习惯如此) 成功运行程序后,打开项目所在目录,发现产生了一个release模式的build目录。(值得一提的是,如果在代码中使用本地文件,相对路径相对的是build目录,而不是源代码所在目录。)
程序exe文件运行的时候,需要一大堆dll,如果环境中没有这些dll则不能运行。这也是造成本机打包的程序在其他计算机环境无法运行的主要原因。关于动态链接库(dll)的详细介绍,可以参考:动态链接库(DLL) 首先进入Release模式产生的build文件夹,进入release文件夹,找到[你的项目名称].exe,下面以我的项目VirusCrisis.exe为例。 复制此exe至一空文件夹,(个人习惯,不使用带有中文的目录,可能会造成bug),比如在桌面上创建一个文件夹,命名为temp。 打开cmd,进入此目录(可以先右击属性,复制目录,然后粘贴上去),使用windeployqt打包,如下图 运行结果如下图 值得注意的是,我这里使用的是MSVC编译工具,如果Visual Studio的环境变量没有配好,会出现这样的错误 解决方法:在环境变量中添加VCINSTALLDIR,它的值为安装目录,我使用的是VS2017,配置如下 环境变量配置好后,把cmd关了重新打开,执行上述打包操作,就欧克了! 打开temp问价夹,可以发现windeployqt自动添加了很多运行所必备的文件。
windeployqt虽然功能强大,但是不能添加一些用到的第三方库dll,为了避免缺失dll,使用360任务管理器进行进一步添加。 360管理器在360安全卫士的“功能大全”里,下载即可。 打开temp文件夹里的exe,让它运行。 右击,查看加载模块。 可以发现这些dll大概有三类,第一种位于C:\WINDOWS的系统dll,如果目标计算机环境的系统dll不缺失,这些dll不必添加。第二种是位于C:\Users\Lenovo\Desktop\temp的dll,是windeployqt已经配置好的。第三种,是第三方库dll。比如对于我这个项目,有 右击,打开所在目录,复制到temp文件夹即可。
一个完整的项目,往往需要图片、声音等素材,(我个人习惯是使用qrc资源文件添加资源)。将源代码的pro配置文件、qrc以及所使用的资源复制到temp即可。
enigma virtual box工具可以将刚刚打包好的文件夹整合成一个完整的exe。 打开此工具,在主程序文件名称选择temp文件夹下的exe,输出路径会自动给出,可以自行修改路径以及输出的exe名称。 点击添加,添加文件夹递归(x) 选择temp文件夹,点击确定 点击确定 点击文件选项 勾选压缩文件,点击确定 点击打包 打包结束后,到输出路径找到输出的exe即可。
