本版本库的一些备注

中文 / 多语言支持

虽然这个网站的维护者(Fsu0413,也就是我)是中国人,是中文母语使用者,不过此网站最初做成的时候是只有嘤文版的。
目前我正在逐步在此网站上添加简体中文支持。

得益于 Hugo 自带的多语言支持和 近期新换的 Relearn 主题,本网站 近期刚刚 支持多语言。
目前的中文也仅仅处于刚刚开始组织语言的阶段。有一些内容还没有写完。
不过主要内容均使用中文重新写了一遍,应该不会影响大家下载二进制文件了。

对网站建设有建议和意见的可以去 GitHub 上提出 issue

网站镜像

最近 我在中国大陆使用 Gitee Pages 服务构建了一个此网站的镜像。
这个镜像配置的默认语言改为简体中文。

由于 Gitee 的自定义域名服务只提供给付费用户,目前中文站是在 Gitee 的域名下的。
如果之后我对此服务感觉不错的话,我可能会付费使用这个服务。

Gitee Pages (中国大陆,使用简体中文作为默认语言)
Github Pages (美国,使用英语作为默认语言)

可复现的构建

为了实现对 Qt 的可复现的构建,我使用一系列脚本进行构建和打包。
如果您对构建方法感兴趣的话,可以参考下面的 GitHub 版本库。(不要 FORK 这个版本库!!!!

GitHub

但是不太好的一点是这个网站是手工编辑的。
这个网站的源码如下:

GitHub

对静态构建的备注

我不在大型项目中使用静态构建。我并不认为使用静态构建是很明智的选择。

我可以理解使用静态构建的目的是为了仅发布单一可执行程序,但是事实上有如下限制:

  • 在程序不以 (L)GPLv3 许可协议发布的情况下,使用静态构建并不免费。
  • 部分模块无法构建。(比如 WebEngine 之类的)
  • 不能使用动态链接的插件。
  • 在构建期不执行链接操作,会在后续过程中导致可能的链接问题

这边还是建议在大型项目中停止使用静态构建。相信我,这么做更加自由。

静态 Lite 构建和静态 Full 构建 (2022 年 3 月 8 日更新)

静态 Lite 构建跳过了大多数 Qt 模块。只对 QtCore、QtDeclarative(QtQml 2),QtXmlPatterns 和 QtXXXExtras 进行了构建。
对于在不静态构建整个 Qt 的情况下构建 QtIFW 来说是很有用的。

(2022 年 3 月 8 日更新)Qt 5 静态 Lite 构建也用于我的 QQtPatcher。
(2021 年 12 月 4 日更新)因为 Qt 6 的交叉构建需要一套相同版本的 Qt 6 的主机工具,我们通过这一套静态 Lite 的版本的 Qt 来构建主机工具。

静态 Full 构建不跳过多数 Qt 模块,仅跳过无法构建通过的模块。

对使用旧版本 Qt 的备注

我这里只提供最新的大版本 / LTS 版本的预编译库,以前的非 LTS 的版本会在我构建并上传新版本的包之后删除。

我不明白为什么会有人不更新 Qt 到当前分支的最新版本(比如在我写这个备注的时候,5.6.1-1 已经发布了大半个月了,但是还是有相当一部分人还在用 5.6.0)。

为了稳定性?兼容性?懒得更新?还是其他原因?

  • 稳定性
    我认为更新到当前分支的最新版本增加稳定性。Qt 在小版本更新时仅修复 bug。这并不是问题。
  • 兼容性
    相同的大版本都是二进制兼容的。这不是需要考虑的点。

  • 不要跟我比懒,我懒得跟你比。
  • 其他原因
    我不知道还会有什么其他原因。

对于发布的压缩文件的备注

在 Windows 上,打包文件使用 7z 程序,使用 LZMA2 算法压缩成 7z 格式。
生成压缩文件的命令行类似这样:

7z a -t7z -m0=LZMA2:d256m:fb273 -mmt=3 -myx -mqs -ms=on -- xxx.7z xxx

在 Linux 上,打包文件使用 GNU tar 创建,而在 macOS 上,则是使用 bsdtar
此外同时使用 7z 来进行 xz 格式的压缩。
生成压缩文件的命令行类似这样:

tar -cf - xxx | 7zr a -txz -m0=LZMA2:d256m:fb273 -mmt=3 -myx -si -- xxx.tar.xz

要确保您使用的解压缩软件支持 LZMA2 算法。例如:
7z 用户需要更新到 9.20 或者更新。
WinRAR 用户需要更新到 4.00 或者更新。
如果是其他解压缩软件,可以检查一下他们的最新版本,有可能最新版本就支持 LZMA2 算法了。

近期 Arch Linux 和 MSYS2 在将他们的包管理工具的压缩算法改为了 zstd。
只有较新的 GNU tar(1.31 以及更新)和较新的 bsdtar(3.3.3 以及更新)直接支持 .tar.zst 压缩方法。
我不会在这里使用 zstd,因为压缩比不如 LZMA2。

这份 Qt 和官方发布的 Qt 的区别(2023 年 1 月 8 日更新)

我只提供供各个系统使用的 Qt 的二进制压缩文件。
这份二进制文件应该开箱可用(Qt 5.14 及更新) / 在对 Qt 打补丁后可用(Qt 5.13 及以前)。
(2022 年 4 月 14 日更新)因为安装包经常会被怀疑捆绑不需要的软件(我不会干这种事),我永远不会使用安装包。

(2020 年 6 月 7 日更新) 不需要登录 Qt 账户 !!!这样就摆脱了他们胡说的“这可以协助优化 Qt”。

这里所有的 Qt 构建均使用 -no-icu 来配置。因为我觉得 ICU 在通常情况下没用,而且这东西还挺大。

在 Qt 不支持使用平台原生的借口创建 SSL 套接字的平台使用链接的 OpenSSL。
Qt 5.12 及以前的版本的 Windows 构建使用动态(共享)链接的 OpenSSL 库。安卓构建使用静态链接的 OpenSSL 库。
macOS 构建使用 SecureTransport 代替 OpenSSL 库。
Qt 5.13 及以后的版本的 Windows 构建使用 SChannel 代替 OpenSSL 库。

(2022 年 4 月 14 日更新)没有调试库,这大约节省了整个 Qt 包的大半部分空间。
(不要在没有商业定制化的情况下请求添加这个东西,主要是我不用。注:商业定制化还没有开始运营)

没有示例程序,这大约节省了整个 Qt 包的大半部分空间。

没有文档(而且在 Qt 5.12 之后由于 QDoc 依赖 clang 导致 QDoc 也没有了)。因为 Qt 文档可以在 http://doc.qt.io 随时查阅,没有必要在包里面再放一份文档。

(2023 年 1 月 8 日更新) 没有证书 。这对某些非开发人员来说可能是灾难性的。
由于二进制程序证书需要非常昂贵的价格购买,而我作为个人开发者不可能购买如此昂贵的应用程序证书来进行可信度校验。
所以在运行我构建的 Qt 的时候,会提示程序不被信任的问题。
此问题在我这里暂时无法解决,除非以后开始进行商务化定制,拿到收入后,再去购买证书进行校验。
在此之前,可能会实现基于 GPG 的校验。(虽然咕咕咕了)
(由于 Qt 5.14 以前的版本需要在安装后对 Qt 打补丁,所以无法校验。Qt 5.14 以及以后的版本可以重定位,解决了这个问题)

Qt offering changes 2020 (2023 年 9 月 2 日更新)

Qt 宣布了 Qt offering changes 2020
下面是我对这个博客的一些想法。

首先我是有 Qt 账户的,不过安装 Qt 开发包为啥需要 Qt 账户我一直不明白。
都是一套源码编译出来的东西,登录个 Qt 账户也不会不一样,又不会给 Qt 增加任何功能,他们说的什么“这可以协助优化 Qt”根本就是在扯淡。

LTS 只给商业许可,那么 LTS 的源码包是什么许可?
(2022 年 3 月 8 日删除) 如果也是商业许可的话,Qt 基本就和稳定开源软件说拜拜了。
(2022 年 3 月 8 日更新)按照现有的所有版本延迟一年发布的计划,举个例子一个安全补丁会延迟非常晚才被修复,尤其 Qt 公司构建的原版 Qt 更是这样。
再说了他们的 LTS 支持时间也不算长,Windows 支持 10 年,(2022 年 4 月 14 日更新) CentOS Rocky Linux 支持 10 年,他支持 3 年。。。。

离线安装包只给商业许可,等于国内只能找网络通畅的时间(一般是早晨 8 点前)来用在线安装包安装 Qt 开源版了。

什么样的企业算小企业?
一个人开一家空壳公司,这种企业算非常小非常小的企业吧?用这种企业来买 Qt 发布软件,共事的其他员工在私底下用开源版,每年只用 499 美元?
这样做肯定会赔钱的。

还有,我会继续我编译 Qt 的业余工作,希望 Qt for MCUs 早日开源。

(2023 年 9 月 2 日追加)前段时间有幸在公司中一个小型 MCU 项目中看到了 Qt for MCUs,是以二进制形式提供给我们的。
它使用与桌面及移动端 Qt 完全不同的基础架构,不使用 Qt Base 等现有的自由软件。

由于我当时的开发任务与 Qt 无关,没有对该部分内容进行探究及调查,了解到的内容也就止步于此了。

GPG 签名 (2021 年 2 月 6 日更新)

我正在找个方法用 GPG 去签名每个包,但是还没有找到好方法。
我不想在上传包的时候还要再上传一个签名文件,我觉得浪费上传步骤。。。。

(2021 年 2 月 6 日更新)还是没有找到好方法,暂时放放吧。。。

弃用 Windows 10 1809 之前的版本以及 32 位 Windows (重要备注!!)(2023 年 3 月 25 日更新)

(2023 年 3 月 25 日更新)由于 Windows 8.1 于 2023 年 1 月 10 日结束生命周期。
从 2023 年 3 月 25 日开始不再支持 Windows 8.1。VS2015 和 MinGW 7.3 的构建已迁移到 Windows 10。

Qt 6 在 6.2 以前只支持 64 位 Windows 10 1809 以及以后的版本, 6.3 以后只支持最新版本的 Windows 10 (也即 2004 以后的版本,因为这些版本的系统文件均一致)。

从 2020 年 6 月 3 日(Qt 5.15 发布和 Qt 5.9 结束支持)开始,Windows 8.1 上我只支持 VS2015 和 MinGW 7.3 的构建。
Windows 10 已经变得越来越流行,而且添加更多更多的新特性。大家可以尽快切换到 Windows 10 了。

从 2020 年 1 月 6 日(OpenSSL 1.0.2 系列结束支持)开始,我不再支持 Windows 8 以及更早的版本。请升级到 Windows 8.1 或更新版本。

对当前构建的 Qt 版本的已经决定的结束支持日期(2024 年 1 月 25 日更新)

注:我们在除了 WebAssembly 以外的平台上构建 OpenSSL,所有我们的构建都需要至少支持到那个 OpenSSL 支持的日期。
当前正在使用的是 OpenSSL 3.0 系列,将于 2026 年 9 月 7 日结束支持。

我们已经在 Qt 5.15 的安卓版构建中使用 OpenSSL 3.0 系列。
现在可以确定的是 Qt 5.15 有 5 年的支持,不过目前不清楚 Qt 公司是否会在 2024 年 5 月 26 日之后释放 Qt 5.15 后续版本的代码。
如果 Qt 5.15 后续版本的代码不公开的话,我们不会再升级到 OpenSSL 3.0 以后的版本。

Qt 版本 构建目标 终止支持日期 备注
5.15 系列 Windows 11 with VS2019 (动态) / VS2022 2024 或 2026 年 5 月 26 日 与 Qt 开源版 5.15 系列的终止支持日期保持一致。提前更新 WebEngine。包含 VS2019/22 的 VS 版本升级。
Windows with VS2015 / VS2017 / VS2019 (静态) / MinGW 8.1.0 2024 或 2026 年 5 月 26 日 与 Qt 开源版 5.15 系列的终止支持日期保持一致。包含 VS2017/9/22 的 VS 版本升级。
macOS 2024 或 2026 年 5 月 26 日 与 Qt 开源版 5.15 系列的终止支持日期保持一致。提前更新 WebEngine。(尽可能)包含 Xcode 和 macOS 更新
安卓 2026 年 9 月 7 日 与 OpenSSL 3.0 的终止支持日期保持一致。
WebAssembly 2024 或 2026 年 5 月 26 日 与 Qt 开源版 5.15 系列的终止支持日期保持一致。
6.2 系列 Windows 11 with VS2019 / VS2022 2026 年 9 月 7 日 与 OpenSSL 3.0 的终止支持日期保持一致。包含 VS 版本升级。
Windows 11 with MinGW / LLVM-MinGW 2026 年 9 月 7 日 与 OpenSSL 3.0 的终止支持日期保持一致。包含 MinGW 版本升级。
macOS 2026 年 9 月 7 日 与 OpenSSL 3.0 的终止支持日期保持一致。(尽可能)包含 Xcode 和 macOS 更新
安卓 2026 年 9 月 7 日 与 OpenSSL 3.0 的终止支持日期保持一致。
WebAssembly 2025 年 9 月 29 日 与 Qt 开源版 6.2 系列的终止支持日期保持一致。
6.5 系列 (暂定)2027 年 4 月 3 日 需要确认有没有更新的 OpenSSL 等第三方库。

商业专属的 Qt 版本开源发布日(预计)

Qt 版本 商业专属发布日 开源发布日
5.15.14 2023 年 5 月 25 日 2024 年 5 月 25 日
5.15.15 2023 年 8 月 31 日 2024 年 8 月 31 日 (届时需要确认 Qt 到底是否真的发布了开源版本)
5.15.16 2023 年 11 月 17 日 2024 年 11 月 17 日
6.2.9 2023 年 7 月 4 日 2024 年 7 月 4 日
6.2.10 2023 年 10 月 9 日 2024 年 10 月 9 日
6.2.11 2024 年 1 月 16 日 2025 年 1 月 16 日
6.2.12 2024 年 3 月 22 日 2025 年 3 月 22 日
6.5.4 2024 年 1 月 11 日 2025 年 1 月 11 日
6.5.5 2024 年 3 月 4 日 2025 年 3 月 4 日

已有的补丁

从 2022 年 3 月 12 日开始我的 Qt 构建包含部分 Qt 提供的补丁。
多数是可以从 Qt 下载站 下载的 CVE 补丁,另外一些是可以从 Qt Gerrit 或者 KDE 下载的一些修复构建的补丁。

下面这个表列出了我构建每个版本时所应用的补丁。
注:我不会对当前正在活跃开发的 Qt 应用补丁,而是单纯等待新版本发布。所以应用补丁的只有商业 LTS 版本和结束生命周期的版本。
若某个补丁在所有的正在维护的版本均已附带或没有应用的必要,则该补丁将会从此表中删除。
括号中的版本号为附带该补丁的发布版本。

问题 \ Qt 版本 5.15.13 6.2.7 6.5.3
CVE-2023-24607 附带 (6.2.8) -
CVE-2023-32573 (5.15.14) (6.2.9) 附带
(仅限 5.15 系列)Clang 构建修复 (5.15.14) - -
CVE-2023-32762 (5.15.14) (6.2.9) 附带
CVE-2023-32763 (5.15.15) (6.2.9) 附带
CVE-2023-33285 (5.15.14) (6.2.9) 附带
CVE-2023-34410 (5.15.15) (6.2.9) 附带
CVE-2023-37369 (5.15.15) × (6.2.10) 附带
CVE-2023-38197 (5.15.15) × (6.2.10) 附带
CVE-2023-43114 (5.15.16) (6.2.10) (6.5.4)
CVE-2023-4863 (5.15.16) (6.2.10) 附带
CVE-2023-45872 - × (6.2.11) -
CVE-2023-51714 1 2 (5.15.17) 1 2 (6.2.11) 1 2 (6.5.4)
CVE-2024-25580 (5.15.17) (6.2.12) (6.5.5)
CVE-2024-30161 - - x (6.5.6)

从 2024 年 3 月 12 日开始我的 Qt 构建会包含一些简单的关于构建问题的修复。
目前只有 LTS 版本应用这些补丁。

问题 \ Qt 版本 5.15.13 6.2.7 6.5.3
使用 _WIN32_WINNT 的默认值为 0x0A00 的新版 MinGW-w64 上 Qt 5.15 系列无法构建 2024-Fs-qmake-enable-build-on-higher-version-of-MinGW-w64-qtbase-5.15.diff - -
使用 GCC 11 或更新的版本无法构建 Qt 5.15 系列上的 angle 2024-Fs-angle-fix-build-on-gcc11-qtbase-5.15.diff - -
Qt 5.15 系列的 d3d12 Qt Quick Scene Graph 插件无法找到 fxc,并且找不到 _uuidof 函数 2024-Fs-d3d12-fix-compile-with-later-mingw-qtdeclarative-5.15.diff - -
使用 Android NDK r25 或更新的版本无法构建 Qt 5.15 和 6.2 系列 2024-Fs-qlogging-fix-Android-NDK-r25-builds-qtbase-5.15.diff 2024-Fs-qlogging-fix-Android-NDK-r25-builds-qtbase-6.2.diff -
使用 GCC 13 无法构建 Qt 6.2 系列上的 QtShaderTools - 2024-Fs-glslang-fix-GCC-13-builds-qtshadertools-6.2.diff -
使用 GCC 13 无法构建 Qt 6.2 和 6.5 系列上的 Qt3D - 2024-Fs-qt3dassimp-fix-GCC-13-builds-qt3d-6.2.diff 2024-Fs-qt3dassimp-fix-GCC-13-builds-qt3d-6.5.diff
使用 GCC 13 无法构建 Qt 6.2 系列上的 QtQuick3D - 2024-Fs-qtquick3dassimp-fix-GCC-13-builds-qtquick3d-6.2.diff -