Qt 6.8.3 源码编译:Windows 平台

本文要点

  • 面向 Windows 平台 Qt 6.8.3 源码构建。
  • 覆盖 CMake、Ninja、Python、Node.js、OpenSSL 3 等工具链准备。
  • 重点说明 Qt WebEngine 与 proprietary codecs 相关配置。

引言

在开发Qt应用程序时,使用预编译的Qt版本虽然方便,但有时我们需要从源码编译Qt,以获得特定功能支持、性能优化或定制化需求。文章将以Qt 6.8.3版本为例,详细介绍如何在Windows平台上使用Visual Studio工具链进行源码编译,并特别针对Qt WebEngine模块进行配置,以确保其支持专有音视频编解码器(如H.264和MP3),同时集成OpenSSL等常用第三方库。

本教程基于以下核心配置指令进行深度解析:

1
2
.\configure.bat -prefix "D:\Qt\Qt6.8.3" -shared -confirm-license -opensource -verbose -debug-and-release -make examples -qt-zlib -qt-libpng -qt-libjpeg -qt-tiff -qt-webp -webengine-proprietary-codecs -openssl-linked -- -D OPENSSL_ROOT_DIR="C:\Program Files\OpenSSL" 
# 重新配置追加 -redo 清空历史配置缓存

一、 环境与工具链准备

在开始编译之前,需要准备好所有必需的软件和工具链。Qt 6的编译依赖于CMake构建系统与ninja工具。

1. 操作系统与编译器

|
组件

|

推荐版本

|

备注

|
| — | — | — |
|

操作系统

|

Windows 10/11 (64位)

|

建议使用较新版本。

|
|

编译器

|

Visual Studio 2022 (MSVC)

|

推荐使用MSVC 2022,需安装“使用C++的桌面开发”工作负载,并确保包含最新的Windows SDK (如10.0.17763或更高)。

|
|

内存磁盘

|

至少16GB RAM (推荐32GB以上,尤其是编译WebEngine时);100GB以上空闲磁盘空间。

|

Qt WebEngine编译过程资源消耗巨大。

|

1\. 操作系统与编译器 - 图 1

2. 必需的构建工具

Qt 6的构建系统基于CMake,并依赖多种脚本语言和工具。

|
工具

|

推荐版本

|

获取方式

|

作用

|
| — | — | — | — |
|

CMake

|

3.22 或更高版本

|

官方网站

|

Qt 6的配置和构建工具。

|
|

Ninja

|

最新版本

|

官方网站

|

推荐的构建工具,比jom或nmake更快。

|
|

Python

|

3.8 或更高版本 (64位)

|

官方网站

|

Qt WebEngine编译必需的脚本语言。

|
|

Perl

|

5.x (64位)

|

Strawberry Perl

|

编译Qt核心模块和某些工具(如QDoc)所需。

|
|

libclang

|

20.1.0

|

下载地址

|

编译Qt WebEngine和QDoc所需。

|
|

gnuwin32

|

Qt预编译版本

|

gperf,bison,flex下载地址

|

QWebEngine编译需要

|

重要提示: 请确保上述所有工具的安装路径已添加到系统的PATH环境变量中,以便在命令行中直接调用,例如cmake.exe、ninja.exe、python.exe和perl.exe。

本次编译相关工具版本如下:

  • cmake version 3.31.9

  • ninja 1.12.0

  • Python 3.13.5

  • Perl v5.40.2

  • libclang 20.1.0

  • gnuwin32

官方文档构建要求如下:

2\. 必需的构建工具 - 图 2

3. 第三方库准备 (OpenSSL3、html5lib)

OpenSSL3:
由于配置指令中使用了-openssl-linked,这意味着您需要提供OpenSSL的开发库,并将其链接到Qt中。

  1. 推荐版本: OpenSSL-3.5.4

  2. 下载OpenSSL源码或预编译库: 推荐下载适用于MSVC的预编译OpenSSL库,或自行编译。

  3. 设置OpenSSL路径: 确保您的OpenSSL安装路径与配置指令中的路径一致,例如:C:\Program Files\OpenSSL。

html5lib:

  1. 使用pip3 install html5lib下载安装依赖,QWebEngine编译需要。

二、 获取Qt 6.8.3源码

  1. 下载源码包: 访问Qt官方下载页面,下载qt-everywhere-src-6.8.3.zip或tar.xz源码包。

  2. 解压源码: 将源码解压到一个路径较短、不含空格的目录,例如 D:\Qt6。

注意: 由于Windows路径的最大长度为被定义为260 个字符,路径过长或包含空格(如Program Files)可能导致编译失败,尤其是在编译Qt WebEngine时。错误警告如下:

二、 获取Qt 6.8.3源码 - 图 3


三、 启动编译环境

使用Visual Studio的命令行工具来设置正确的编译环境:

  1. 将前面编译完成的SSL动态库复制到Qt源码解压目录下的qtbase\bin,否则会导致qmlcachegen.exe在编译过程中无法正常使用。

    三、 启动编译环境 - 图 4

  2. 修改WebEngine模块的源代码,解决官方代码的bug,详见 七、编译错误解决方案-错误四部分。

  3. 在Windows搜索栏中,搜索并打开 “x64 Native Tools Command Prompt for VS 2022”(或您使用的VS版本),右击以管理员身份运行。

  4. 执行chcp 65001 切换至utf-8开始编译,否则编译webengine中python脚本会报错。

  5. 切换到Qt源码的父目录,例如:

    1
    2
    D:
    cd D:\Qt6

四、 配置指令详解

核心配置指令如下,我们将逐一解析每个选项的含义:

1
.\configure.bat -prefix "D:\Qt\Qt6.8.3" -shared -confirm-license -opensource -verbose -debug-and-release -make examples -qt-zlib -qt-libpng -qt-libjpeg -qt-tiff -qt-webp -webengine-proprietary-codecs -openssl-linked -- -D OPENSSL_ROOT_DIR="C:\Program Files\OpenSSL" 

|
选项

|

含义

|

备注

|
| — | — | — |
|

-prefix "D:\Qt\Qt6.8.3"

|

指定Qt的安装路径。

|

编译完成后,所有文件将安装到此目录。

|
|

-shared

|

构建动态链接库(DLL)。

|

默认选项,与-static相对。

|
|

-confirm-license

|

自动确认许可证。

|

适用于-opensource或-commercial。

|
|

-opensource

|

使用开源许可证进行构建。

|

必须与-confirm-license一起使用。

|
|

-verbose

|

显示详细的配置和构建信息。

|

有助于调试配置问题。

|
|

-debug-and-release

|

同时构建Debug和Release版本。

|

推荐用于开发环境。

|
|

-make examples

|

编译Qt自带的示例程序。

|

方便学习和测试。

|
|

-qt-zlib

|

使用Qt自带的zlib库。

|

避免外部依赖冲突。

|
|

-qt-libpng

|

使用Qt自带的libpng库。

|

避免外部依赖冲突。

|
|

-qt-libjpeg

|

使用Qt自带的libjpeg库。

|

避免外部依赖冲突。

|
|

-qt-tiff

|

使用Qt自带的TIFF库。

|

避免外部依赖冲突。

|
|

-qt-webp

|

使用Qt自带的WebP库。

|

启用WebP图像格式支持。

|
|

-webengine-proprietary-codecs

|

启用WebEngine专有音视频编解码器。

|

确保WebEngine支持H.264、MP3等格式的音视频播放。

|
|

-openssl-linked

|

链接OpenSSL库。

|

确保Qt的网络模块具备SSL/TLS支持。

|
|

--

|

分隔符,用于将后续参数传递给底层的CMake。

|

|
|

-D OPENSSL_ROOT_DIR="..."

|

通过CMake变量指定OpenSSL的根目录。

|

确保CMake能找到OpenSSL的头文件和库文件。

|

重新配置提示:

如果您需要修改配置并重新运行configure.bat,建议在指令中追加-redo选项,以清空历史配置缓存并重新开始配置:

1
.\configure.bat -redo ... [其他配置选项]

五、 编译与安装过程

1. 执行配置

在VS Native Tools Command Prompt中,执行您的配置指令。配置过程可能需要几分钟。

1
.\configure.bat -prefix "D:\Qt\Qt6.8.3" -shared -confirm-license -opensource -verbose -debug-and-release -make examples -qt-zlib -qt-libpng -qt-libjpeg -qt-tiff -qt-webp -webengine-proprietary-codecs -openssl-linked -- -D OPENSSL_ROOT_DIR="C:\Program Files\OpenSSL" 

配置成功后,命令行会提示您运行构建命令。

2. 执行编译

使用cmake --build命令和--parallel选项来并行编译,以加快速度。

1
cmake --build . --parallel

注意: 编译过程,尤其是Qt WebEngine模块,耗时极长(可能数小时甚至更久),请耐心等待。

3. 执行安装

编译完成后,执行安装命令将编译好的文件复制到-prefix指定的目录(D:\Qt\Qt6.8.3)。

1
ninja install

至此,Qt 6.8.3的源码编译和安装过程完成。


六、 常见问题与解决方案

|
问题

|

原因

|

解决方案

|
| — | — | — |
|

编译WebEngine时内存不足

|

WebEngine编译需要大量内存(建议32GB+)。

|

增加系统内存或使用具有更多资源的机器。

|
|

路径过长导致编译失败

|

Windows文件路径限制,尤其影响WebEngine。

|

将Qt源码和编译目录放在根目录附近,确保路径短且不含空格。

|
|

找不到Python/Perl/CMake

|

环境变量未正确配置。

|

确保所有必需工具的安装路径已添加到PATH环境变量中。

|
|

OpenSSL配置错误

|

OPENSSL_ROOT_DIR指向的目录不正确。

|

检查路径是否正确,并确保该目录下包含include和lib等OpenSSL开发文件。

|
|

重新配置失败

|

历史配置缓存干扰。

|

使用-redo选项重新运行configure.bat。

|


七、编译错误解决方案

  • 错误一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[11/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_qmlcache_loader.cpp
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_qmlcache_loader.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_qmlcache_loader.cpp
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --resource-name qmlcache_qtvkbstylesplugin -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_qmlcache_loader.cpp @D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_qml_loader_file_list.rsp"[12/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/KeyboardStyle.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyboardStyle_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/KeyboardStyle.qml"[13/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/KeyIcon.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyIcon_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/KeyIcon.qml"[14/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/KeyPanel.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_KeyPanel_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/KeyPanel.qml"[15/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/SelectionListItem.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_SelectionListItem_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/SelectionListItem.qml"[16/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/TraceInputKeyPanel.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceInputKeyPanel_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/TraceInputKeyPanel.qml"[17/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp, .rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp.aotstats
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp.aotstats D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp.aotstats
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/TraceCanvas.qml -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceCanvas_qml.cpp D:/qt6/qtvirtualkeyboard/src/styles/TraceCanvas.qml"[18/52957] Generating .rcc/qmlcache/qtvkbstylesplugin_TraceUtils_js.cpp
FAILED: qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceUtils_js.cpp D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceUtils_js.cpp
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtvirtualkeyboard\src\styles && "D:\Program Files\CMake\bin\cmake.exe" -E make_directory D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/qmlcachegen.exe --bare --resource-path /qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/TraceUtils.js -I D:/qt6/qtbase/qml/ -I D:/qt6/qtbase/qml -I D:/qt6/qtbase/qml -i D:/qt6/qtbase/qml/QtQuick/VirtualKeyboard/Styles/qmldir --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qmake_QtQuick_VirtualKeyboard_Styles.qrc --resource D:/qt6/qtvirtualkeyboard/src/styles/.qt/rcc/qtvkbstylesplugin_raw_qml_0.qrc --dump-aot-stats --module-id=QtQuick.VirtualKeyboard.Styles(qtvkbstylesplugin) -o D:/qt6/qtvirtualkeyboard/src/styles/.rcc/qmlcache/qtvkbstylesplugin_TraceUtils_js.cpp D:/qt6/qtvirtualkeyboard/src/styles/TraceUtils.js"[31/52957] Building CXX object qtdeclarative\src\quicklayouts\CMakeFiles\QuickLayouts.dir\Release\cmake_pch.cxx.obj
FAILED: qtwebengine/src/core/Release/AMD64/QtWebEngineCore.stamp qtwebengine/src/core/Release/AMD64/obj/tools/v8_context_snapshot/v8_context_snapshot.stamp qtwebengine/src/core/Release/AMD64/QtWebEngineCore D:/qt6/qtwebengine/src/core/Release/AMD64/QtWebEngineCore.stamp D:/qt6/qtwebengine/src/core/Release/AMD64/obj/tools/v8_context_snapshot/v8_context_snapshot.stamp D:/qt6/qtwebengine/src/core/Release/AMD64/QtWebEngineCore
C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtwebengine\src\core && D:\Strawberry\c\bin\ninja.exe -C D:/qt6/qtwebengine/src/core/Release/AMD64 QtWebEngineCore"
ninja: build stopped: subcommand failed.

七、编译错误解决方案 - 图 5

解决方案:将ssl动态链接库拷贝到Qt源码解压目录下的qtbase\bin

  • 错误二

七、编译错误解决方案 - 图 6

解决方案:执行chcp 65001 切换至utf-8开始编译

  • 错误三

    七、编译错误解决方案 - 图 7

    解决方案:pip3 install html5lib

  • 错误四

1
2
../../../3rdparty/chromium/v8\src/heap/cppgc/marking-state.h(345): error C2352: “cppgc::internal::MarkingStateBase::MarkNoPush”: 调用非静态成员函数需要一个对象
../../../3rdparty/chromium/v8\src/heap/cppgc/marking-state.h(84): note: 参见“cppgc::internal::MarkingStateBase::MarkNoPush”的声明

七、编译错误解决方案 - 图 8

解决方案:(chromium代码存在bug),官方修复地址。具体操作为修改qtwebengine\src\3rdparty\chromium\v8\src\heap\cppgc\marking-state.h源码

七、编译错误解决方案 - 图 9

  • 错误五
1
2
3
[69/1134] Linking CXX shared library qtactiveqt\examples\activeqt\wrapper\Release\wrapperax.dll
FAILED: qtactiveqt/examples/activeqt/wrapper/Release/wrapperax.dll qtactiveqt/examples/activeqt/wrapper/Release/wrapperax.lib
C:\WINDOWS\system32\cmd.exe /C "cd . && "D:\Program Files\CMake\bin\cmake.exe" -E vs_link_dll --msvc-ver=1944 --intdir=qtactiveqt\examples\activeqt\wrapper\CMakeFiles\wrapperax.dir\Release --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests -- "D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\link.exe" /nologo qtactiveqt\examples\activeqt\wrapper\CMakeFiles\wrapperax.dir\Release\wrapperax_autogen\mocs_compilation_Release.cpp.obj qtactiveqt\examples\activeqt\wrapper\CMakeFiles\wrapperax.dir\Release\main.cpp.obj qtactiveqt\examples\activeqt\wrapper\CMakeFiles\wrapperax.dir\Release\wrapperax.rc.res /out:qtactiveqt\examples\activeqt\wrapper\Release\wrapperax.dll /implib:qtactiveqt\examples\activeqt\wrapper\Release\wrapperax.lib /pdb:qtactiveqt\examples\activeqt\wrapper\Release\wrapperax.pdb /dll /version:0.0 /machine:x64 /INCREMENTAL:NO /DEF:qtactiveqt\examples\activeqt\wrapper\wrapperax.def qtbase\lib\Qt6AxServer.lib shell32.lib qtbase\lib\Qt6AxBase.lib advapi32.lib gdi32.lib ole32.lib oleaut32.lib user32.lib qtbase\lib\Qt6Widgets.lib qtbase\lib\Qt6Gui.lib d3d11.lib dxgi.lib dxguid.lib d3d12.lib qtbase\lib\Qt6Core.lib mpr.lib userenv.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && C:\WINDOWS\system32\cmd.exe /C "cd /D D:\qt6\qtactiveqt\examples\activeqt\wrapper && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/idc.exe D:/qt6/qtactiveqt/examples/activeqt/wrapper/Release/wrapperax.dll /idl D:/qt6/qtactiveqt/examples/activeqt/wrapper/wrapperaxRelease.idl -version 1.0 && D:\qt6\.qt\bin\qt_setup_tool_path.bat midl D:/qt6/qtactiveqt/examples/activeqt/wrapper/wrapperaxRelease.idl /nologo /tlb D:/qt6/qtactiveqt/examples/activeqt/wrapper/wrapperaxRelease.tlb && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/idc.exe D:/qt6/qtactiveqt/examples/activeqt/wrapper/Release/wrapperax.dll /tlb D:/qt6/qtactiveqt/examples/activeqt/wrapper/wrapperaxRelease.tlb && D:\qt6\.qt\bin\qt_setup_tool_path.bat D:/qt6/qtbase/bin/idc.exe D:/qt6/qtactiveqt/examples/activeqt/wrapper/Release/wrapperax.dll /regserver""

七、编译错误解决方案 - 图 10

解决方案:权限不足,以管理员身份执行x64 Native Tools Command Prompt for VS 2022

参考文献

Qt6编译选项
Qt6Windows编译教程
QWebEngine编译教程
QWebEngine编译选项
gnu-win32
libclang
QDoc编译
Qt6编译教程
Qt6WebEngine编译修复