加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

一文详解 C++ 框架:教你如何构建安装程序

发布时间:2022-12-07 15:33:35 所属栏目:应用 来源:转载
导读: 当软件开发完成之后,还有一项很关键的任务要做 - 打包发布。换句话说,我们的软件最终要交付给用户,并且能够让他们很容易地安装在自己的系统上。

构建安装程序
那么,该如何制作这样的安

当软件开发完成之后,还有一项很关键的任务要做 - 打包发布。换句话说,我们的软件最终要交付给用户,并且能够让他们很容易地安装在自己的系统上。

ar应用接入微信小程序_51单片机c程序应用实例详解_应用程序包

构建安装程序

那么,该如何制作这样的安装程序(软件包)呢?我们一步一步道来。

静态库与动态库

在介绍打包之前,有必要分享一下静态库与动态库的区别,因为最终安装包中的文件组成与之息息相关。

静态库和动态库的区别

Tips:对于使用 Qt 的应用程序,如果要静态编译,则需要构建一个静态版的 Qt。这意味着,无法关闭源代码并在 LGPL 上回复(要么开放源代码,要么获得商业版 Qt 许可证)。

在 Windows 中,要解决可执行文件过大的问题,可以使用像 UPX 这样的加壳工具。在对可执行文件压缩之后,会在启动时将其解压缩到 RAM 中。

而在 Linux 中,可以通过 strip 命令来去除目标文件中的调试信息、符号信息,以减小程序的大小。但要注意一点,strip 只能用于可执行文件和动态库(.so),不能用于静态库(.a)。

应用程序的组成

对于 Qt 应用程序来说,它们一般由下述文件组成,这些文件可分为三部分:

程序组成

支持文件可以被集成到可执行文件中,最简单的方法是使用 Qt 资源系统,它允许将任何文件嵌入到可执行文件中。这是大多数仅由可执行文件(而非用户)使用的文件的逻辑位置,像上面说的图片、翻译文件、帮助文档等,千万不要将示例文档、或者用户希望能够在文件系统中找到的其他文件放在这里面。

在创建安装程序时,则需要用到这些资源并从中构建软件包。该包不仅包含了所需的文件,还可能会包含一些说明(例如:ReadMe),以及用户需要遵循的许可协议(License),等等。

构建安装程序

从某种程度上来讲,构建安装程序是平台特定的任务应用程序包,而且将来可能会一直都是。这不仅因为平台不同,而且因为分发机制不同。

Windows

在 Windows 平台上,当构建完 Qt 程序之后,需要找到其所依赖的动态库(dll)。为此,可以使用工具 Dependency Walker,它展示了一个图形树,包含了程序所依赖的 dll,以及每个 dll 依赖的其他 dll。

应用程序包_ar应用接入微信小程序_51单片机c程序应用实例详解

查找依赖

使用 Dependency Walker 有个诀窍 - 分类查找:判断哪些 dll 是 Windows 自带的(即:预装在用户计算机上的)、哪些是属于 Qt 的(即:需要打包的)。另外,还要考虑用到的一些第三方库,这可能会增加更多的依赖关系。最后,还有一个需要注意的问题:Qt dll 可以依赖于其他 Qt dll(例如,Qt3Support 模块依赖于大多数其他 Qt 模块)。

在使用 Dependency Walker 将所需文件列表放在一起后,下一步是从这些文件中构建一个安装程序,有许多工具都可以完成此任务:

Tips:在测试安装程序时,建议使用一台没有安装任何 Qt 版本的机器(最好是全新安装的 Windows)。如果安装程序缺少 dll,将无法运行并显示相应的错误信息,指出缺少哪个 dll。但是,在启动时不会检查插件,因此需要确保测试插件提供的所有功能都存在。

Linux

对于 Linux 系统来说,要查看可执行文件依赖的库以及缺少的函数符号,可以使用 ldd -r 指令。

如果要部署 Qt 应用程序,可以选择以下方式:

Tips:和 Windows 不同的是,Linux 下可执行文件及其依赖库放在同一目录一般是无法正常运行的。常用方式是写一个 Shell 脚本,并用 LD_LIBRARY_PATH 指定依赖库所在目录,然后通过运行这个脚本来间接地启动程序。

OS X

买不起... 买不起... 买不起... 贫穷限制了我,So 暂不涵盖!

多平台 GUI 安装程序

除了上述特定平台的打包方式之外,还有一些支持跨平台的工具:

以上介绍的都是一些比较知名、并且相对稳定的工具,可以很好地帮助我们构建 Qt 安装程序,我相信类似的工具还有很多,不知道你用的是哪一款呢?Enjoy

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!