You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows11下编译Qt6.8.1源码失败求助(需保留PDB文件)

Qt 6.8.1 Windows 11 Release编译生成PDB失败问题解决

问题背景

在Windows 11环境编译Qt 6.8.1源码的Release版本时,启用-force-debug-info和-separate-debug-info参数以生成PDB文件,编译过程中触发moc工具崩溃;移除这两个参数或改用Debug模式可正常编译,但需保留Release版本的PDB支持。

编译命令

"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 10.0.22621.0 -vcvars_ver=14.29.30133

set INCLUDE=C:\Library\vcpkg\installed\v142-x64-dynamic-md\include;%INCLUDE%
set LIB=C:\Library\vcpkg\installed\v142-x64-dynamic-md\lib;%LIB%
set PATH=C:\Library\vcpkg\installed\v142-x64-dynamic-md\bin;%PATH%
set PATH=c:\DevTool\libclang-riit\release\bin;%PATH%

.\configure.bat -platform win32-msvc -nomake tests -nomake examples -opensource -confirm-license ^
    -prefix output/v142-x64-release-dynamic-md ^
    -release ^
    -shared ^
    -force-debug-info ^
    -separate-debug-info ^
    -c++std c++17 ^
    -skip qtdoc ^
    -skip qtwebengine ^
    -skip qtwebview ^
    -system-zlib ^
    ZLIB_LIBS="zlib.lib" ^
    -system-libpng ^
    LIBPNG_LIBS="libpng16.lib" ^
    -system-libjpeg ^
    LIBJPEG_LIBS="jpeg.lib turbojpeg.lib" ^
    -system-freetype ^
    FREETYPE_LIBS="freetype.lib" ^
    -system-harfbuzz ^
    -system-sqlite ^
    -system-pcre ^
    PCRE2_LIBS="pcre2-8.lib pcre2-16.lib pcre2-32.lib pcre2-posix.lib" ^
    -system-doubleconversion ^
    -system-webp ^
    WEBP_LIBS="libwebpdecoder.lib libwebpdemux.lib libwebpmux.lib libwebp.lib" ^
    -system-tiff ^
    TIFF_LIBS="tiff.lib" ^
    -ssl ^
    -openssl ^
    -openssl-runtime ^
    OPENSSL_LIBS="libssl.lib libcrypto.lib" ^
    -icu ^
    ICU_LIBS="icudt.lib icuin.lib icuio.lib icuuc.lib" ^
    -gif ^
    -ico ^
    -no-vulkan ^
    -no-xcb ^
    -no-egl ^
    -no-libudev ^
    -no-slog2 ^
    -no-dbus ^
    -DCMAKE_CXX_STANDARD=17 ^
    -DCMAKE_C_STANDARD=11
cmake --build . --parallel

错误信息

c:\Work\Source\QT\QT_6.8.1>cmake --build build\v142-release-shared-md --target qtbase
[132/1528] Automatic MOC for target QSchannelBackendPlugin
FAILED: qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/timestamp qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/mocs_compilation.cpp C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/timestamp C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/mocs_compilation.cpp
C:\WINDOWS\system32\cmd.exe /C "cd /D C:\Work\Source\QT\QT_6.8.1\build\v142-release-shared-md\qtbase\src\plugins\tls\schannel && C:\DevTool\cmake\bin\cmake.exe -E cmake_autogen C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/CMakeFiles/QSchannelBackendPlugin_autogen.dir/AutogenInfo.json RelWithDebInfo && C:\DevTool\cmake\bin\cmake.exe -E touch C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/timestamp && C:\DevTool\cmake\bin\cmake.exe -E cmake_transform_depfile Ninja gccdepfile C:/Work/Source/QT/QT_6.8.1 C:/Work/Source/QT/QT_6.8.1/qtbase/src/plugins/tls/schannel C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/deps C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/CMakeFiles/d/0c35499e00e5c581ee7c4eee6475462d3a5c5365e156a5d2aafd13f3ce126fc6.d"

AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/qtbase/src/plugins/tls/schannel/qtlsbackend_schannel_p.h"
into
  "SRC:/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/EWIEGA46WW/moc_qtlsbackend_schannel_p.cpp"
Process failed with return value 3221225781

Command
-------
C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/bin/moc.exe -DCMAKE_CXX_STANDARD=17 -DCMAKE_C_STANDARD=11 -DNOMINMAX -DQSchannelBackendPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_LEAN_HEADERS=1 -DQT_NETWORK_LIB -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QASCONST -DQT_NO_QEXCHANGE -DQT_NO_QSNPRINTF -DQT_PLUGIN -DQT_USE_QSTRINGBUILDER -DUNICODE -DWIN32 -DWIN64 -D_CRT_SECURE_NO_WARNINGS -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 -IC:/Work/Source/QT/QT_6.8.1/qtbase/src/plugins/tls/schannel -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/network -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtNetwork/6.8.1 -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtNetwork/6.8.1/QtNetwork -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/corelib -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtCore/6.8.1 -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtCore/6.8.1/QtCore -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtCore -IC:/Work/Source/QT/QT_6.8.1/qtbase/mkspecs/win32-msvc -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include/QtNetwork --output-json --output-dep-file -o C:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/src/plugins/tls/schannel/QSchannelBackendPlugin_autogen/EWIEGA46WW/moc_qtlsbackend_schannel_p.cpp C:/Work/Source/QT/QT_6.8.1/qtbase/src/plugins/tls/schannel/qtlsbackend_schannel_p.h

Output
------

问题分析

返回值3221225781对应Windows系统的STATUS_ACCESS_VIOLATION(内存访问冲突),说明moc工具在处理qtlsbackend_schannel_p.h时崩溃。该问题仅在启用-force-debug-info和-separate-debug-info时触发,推测是Qt的moc工具在Release模式下生成调试信息的逻辑存在兼容性问题,或与vcpkg依赖库的调试符号路径冲突。

解决方法

1. 替换Qt调试信息参数为CMake原生参数

移除Qt的-force-debug-info和-separate-debug-info参数,改用CMake直接控制Release模式下的PDB生成:

.\configure.bat -platform win32-msvc -nomake tests -nomake examples -opensource -confirm-license ^
    -prefix output/v142-x64-release-dynamic-md ^
    -release ^
    -shared ^
    -c++std c++17 ^
    -skip qtdoc ^
    -skip qtwebengine ^
    -skip qtwebview ^
    -system-zlib ^
    ZLIB_LIBS="zlib.lib" ^
    -system-libpng ^
    LIBPNG_LIBS="libpng16.lib" ^
    -system-libjpeg ^
    LIBJPEG_LIBS="jpeg.lib turbojpeg.lib" ^
    -system-freetype ^
    FREETYPE_LIBS="freetype.lib" ^
    -system-harfbuzz ^
    -system-sqlite ^
    -system-pcre ^
    PCRE2_LIBS="pcre2-8.lib pcre2-16.lib pcre2-32.lib pcre2-posix.lib" ^
    -system-doubleconversion ^
    -system-webp ^
    WEBP_LIBS="libwebpdecoder.lib libwebpdemux.lib libwebpmux.lib libwebp.lib" ^
    -system-tiff ^
    TIFF_LIBS="tiff.lib" ^
    -ssl ^
    -openssl ^
    -openssl-runtime ^
    OPENSSL_LIBS="libssl.lib libcrypto.lib" ^
    -icu ^
    ICU_LIBS="icudt.lib icuin.lib icuio.lib icuuc.lib" ^
    -gif ^
    -ico ^
    -no-vulkan ^
    -no-xcb ^
    -no-egl ^
    -no-libudev ^
    -no-slog2 ^
    -no-dbus ^
    -DCMAKE_CXX_STANDARD=17 ^
    -DCMAKE_C_STANDARD=11 ^
    -DCMAKE_BUILD_TYPE=Release ^
    -DCMAKE_CXX_FLAGS_RELEASE="/Zi /Ob2 /O2 /DNDEBUG" ^
    -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/DEBUG /OPT:REF /OPT:ICF"
  • /Zi:生成完整的PDB文件
  • /DEBUG:告诉链接器生成调试信息
  • /OPT:REF和/OPT:ICF:优化链接,移除未使用代码并合并重复函数,不影响PDB有效性

2. 升级工具链版本

确保使用最新版本的CMake(建议3.28及以上)和MSVC 2022工具集,旧版本可能存在调试信息生成的兼容性Bug。可通过vcvarsall.bat指定最新工具链版本,例如:

"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 10.0.22621.0 -vcvars_ver=14.38.33130

3. 检查vcpkg依赖路径

确认vcpkg的INCLUDE、LIB、PATH仅指向Release版本的依赖库(v142-x64-dynamic-md),避免混入Debug库路径导致符号冲突。

4. 手动预编译moc工具(可选)

若问题仍存在,可先单独编译moc工具,再手动运行moc处理出错的头文件,排查具体崩溃原因:

cd build/v142-release-shared-md/qtbase/bin
moc.exe -DQT_NO_DEBUG -IC:/Work/Source/QT/QT_6.8.1/qtbase/src/plugins/tls/schannel -IC:/Work/Source/QT/QT_6.8.1/build/v142-release-shared-md/qtbase/include C:/Work/Source/QT/QT_6.8.1/qtbase/src/plugins/tls/schannel/qtlsbackend_schannel_p.h

内容的提问来源于stack exchange,提问作者pp w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:12:04