准备Qt安装包 2

在《构建 Qt 安装程序》一节中,我们介绍了很多主流的打包工具,无论最终选择哪一个,都需要先做好充足的准备,例如:集成程序的依赖库、组织安装包的目录结构等。

当所有这些工作准备就绪,最后才是真正的打包发布环节!

1    编译模式选择

通常情况下,程序的编译方式有两种 - Debug 和 Release,其区别在于:

  • Debug(即:调试版):包含了调试信息,并且不作任何优化,便于程序员调试程序。

  • Release(即:发布版):往往进行了各种优化,使程序在大小和运行速度上都是最优的,以便用户很好地使用。

 

如果最终要发布程序,切记要将编译模式设置为 Release,然后再进行构建:

 

 

 

2    集成程序的依赖库

 

一旦应用程序构建完毕,接下来就是要查找其所依赖的动态库(dll)。由于程序依赖的动态库有时会比较多,因此不建议自己一个个查找(效率太低)。在这里,推荐一些比较好的工具:

 

  • windeployqt:由 Qt 官方提供,旨在自动化创建可部署文件夹的过程,该文件夹包含了应用程序所需的 Qt 相关依赖项(库、插件和翻译等)。

  • Dependency Walker:用于查找程序所需的依赖库,类似的工具还有 Process Explore。

 

当然,工具不是万能的,有时还要依靠自己的经验!

 

添加 Qt 相关依赖项

 

1. 在构建目录下,找到可执行文件 - MyApp.exe,并将其复制到一个单独的文件夹内:

 

 

2. 打开 Qt 自带的命令行工具(或者 CMD、PowerShell),并进入上述创建的文件夹中,执行命令 windeployqt MyApp.exe

 

 

当命令执行完成以后,Qt 的相关 dll、插件、qm 文件都被自动复制进来了,这时基本的依赖关系就算解决了。

 

注意:如果提示找不到 windeployqt,需要将其所在路径(QTDIR/bin)添加到环境变量 PATH 中。

 

添加编译器特定的库

 

虽然 windeployqt 使用很方便,但有一定的局限性,根据 Qt for Windows - Deployment(参考:https://doc.qt.io/qt-5/windows-deployment.html)所述:

The application may require additional 3rd-party libraries (for example, database libraries), which are not taken into account by windeployqt.

 

可以看出,windeployqt 并没有考虑程序依赖的第三方库(例如:OpenCV)。此外,如果使用了 MSVC 编译器,它也不会将相应的 C/C++ 运行时库拷贝进去。这时,像 Dependency Walker(或者 Process Explore )这样的工具就十分有用了,它会检查程序所链接的库文件。

对于特定的编译器,其依赖的库文件如下:

 

VC++ 14.0 (2015)MinGW
  • C 运行时:vccorlib140.dll、vcruntime140.dll

  • C++ 运行时:msvcp140.dll

  • libwinpthread-1.dll

  • libgcc_s_dw2-1.dll

  • libstdc++-6.dll

注意:对于 MSVC 来说,相关库位于 Microsoft Visual Studio 2015/VC/redist,分别对应的 x86、x64 等路径下的 Microsoft.VC140.CRT 中。

添加第三方库

依赖性分析结果如下,一般来说,左侧目录树展开三级就足够了:

 

需要注意的是,黄色问号图标表示的是程序(或者库)所依赖的库,但是找不到该库文件。

由图可知,程序依赖的库有 opencv_world411.dll,依次查找缺失的(非系统)库,然后将他们复制到程序所在目录下。

 

3   组织安装包的目录结构

 

在完成以上步骤之后,目录结构如下所示:

 

 

倘若不需要提供其他附加文件,这就是我们的最终目录了。

 

但如果要包含一些像用户手册、配置文件、License 这样的文件,请确保将他们放入对应的目录下,例如:

 

 

 

4   测试程序

当一切准备就绪,接下来要做的就是:测试包的完整性。

当然,先要在自己的电脑上测试通过。然后再将程序拷贝到没有 Qt 环境的电脑中,测试程序能否能正常运行,插件提供的所有功能都存在。

PS:如果能用一台全新的电脑来测试,那是最好不过了。

 

                                                                                          高效程序员

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值