Qt 项目编译错误排查与解决记录项目信息项目路径D:\ai_xi_bai_projext_code\code\Chap01_Intro\samp1_1HelloWorldQt 版本Qt 6.2.4 MSVC 2019 64bit编译器MSVC 2019 (Visual Studio 2019)操作系统Windows 11通用背景为什么需要在 .pro 中手动配置 SDK 路径本项目的编译环境Qt 6.2.4 MSVC 2019由于安装方式或环境配置原因qmake 未能自动检测到 Windows SDK 的路径导致编译器和链接器不知道去哪里找 SDK 的头文件和库文件。因此必须在.pro文件中手动指定 SDK 路径。Windows SDK 的目录结构如下C:\Program Files (x86)\Windows Kits\10\ ├── Include\10.0.19041.0\ │ ├── ucrt\ ← C 运行时头文件stddef.h, crtdbg.h, stdio.h … │ ├── um\ ← 用户模式 API 头文件windows.h, shellapi.h … │ └── shared\ ← 共享头文件 ├── Lib\10.0.19041.0\ │ ├── ucrt\x64\ ← C 运行时库libucrt.lib … │ └── um\x64\ ← 用户模式 API 库shell32.lib, user32.lib … └── bin\10.0.19041.0\ └── x64\ ← SDK 工具rc.exe, mt.exe …下面三个错误根源都是.pro中手动配置的 SDK 路径不完整——只配了ucrt缺少um和shared。错误一C1083 找不到 UCRT 头文件stddef.h / crtdbg.h / yvals.h错误现象cstddef:12: error: C1083: 无法打开包括文件: stddef.h: No such file or directory yvals.h:12: error: C1083: 无法打开包括文件: crtdbg.h: No such file or directory cstddef:12: error: C1083: 无法打开包括文件: stddef.h: No such file or directory根因这三个是编译阶段的错误比链接错误更早出现。stddef.h、crtdbg.h是UCRTUniversal C Runtime的头文件它们被 MSVC 的cstddef、yvals.h等 C 标准库头文件间接引用只有把$$SDK_ROOT/Include/$$SDK_VER/ucrt加入INCLUDEPATH编译器才能找到它们当.pro中未添加任何 SDK Include 路径时编译器在默认搜索路径中找不到这些头文件导致编译失败。这些错误先于链接错误出现是排查的第一步。错误二LNK1104 找不到系统库shell32.lib错误现象:-1: error: LNK1104: 无法打开文件shell32.lib根因这是链接阶段的错误。编译通过后链接器需要将系统 API 库如shell32.lib链接到可执行文件。Windows SDK Lib 子目录包含内容ucrt\x64\C 运行时库libucrt.lib 等um\x64\系统 API 库shell32.lib、user32.lib、kernel32.lib 等shell32.lib位于Lib\10.0.19041.0\um\x64\但.pro中只添加了-L$$SDK_ROOT/Lib/$$SDK_VER/ucrt/x64UCRT 库路径缺少了um/x64路径链接器在 UCRT 目录下找不到shell32.lib错误三LNK1158 找不到 rc.exe错误现象:-1: error: LNK1158: 无法运行rc.exe排查过程确认 rc.exe 存在C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\rc.exe存在C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\rc.exe存在检查 VS 2019 MSVC 工具链目录D:\visual_studio_2019\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\下没有rc.exe检查 PATH 环境变量PATH 中未包含 Windows SDK 的 bin 目录根因rc.exe资源编译器是Windows SDK的工具不属于 MSVC。链接器在链接完成后需要用rc.exe将 manifest 嵌入 exe但 PATH 中找不到 SDK bin 目录。统一解决方案第一步修复 .pro 文件解决错误一 错误二补全所有 3 个 SDK 子目录的 Include编译用和 Lib链接用路径SDK_ROOT C:/Program Files (x86)/Windows Kits/10 SDK_VER 10.0.19041.0 # Include 路径 —— 编译器找头文件用 INCLUDEPATH $$SDK_ROOT/Include/$$SDK_VER/ucrt # C 运行时头文件stddef.h 等 INCLUDEPATH $$SDK_ROOT/Include/$$SDK_VER/um # 系统 API 头文件 INCLUDEPATH $$SDK_ROOT/Include/$$SDK_VER/shared # 共享头文件 # Lib 路径 —— 链接器找 .lib 用 LIBS -L$$SDK_ROOT/Lib/$$SDK_VER/ucrt/x64 # C 运行时库 LIBS -L$$SDK_ROOT/Lib/$$SDK_VER/um/x64 # 系统 API 库shell32.lib 等 # 额外的编译选项 QMAKE_CXXFLAGS /I$$SDK_ROOT/Include/$$SDK_VER/ucrt QMAKE_CXXFLAGS /I$$SDK_ROOT/Include/$$SDK_VER/um QMAKE_CXXFLAGS /I$$SDK_ROOT/Include/$$SDK_VER/shared第二步添加 SDK bin 到 PATH解决错误三将以下路径添加到用户环境变量 PATHC:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64第三步清理并重新构建删除旧的 build 目录让 qmake 重新生成 Makefile重启 Qt Creator让新 PATH 生效重新qmake - Build提示如果通过 Visual Studio 的Developer Command Prompt for VS 2019启动 Qt Creator开发环境会自动配好所有 SDK 路径从根本上避免以上三个错误。经验总结Windows SDK 目录结构要记清Include/下有ucrt/、um/、shared/三个子目录Lib/下同样有ucrt/、um/两个子目录bin/下有rc.exe等工具手动配置 SDK 路径时必须同时添加 Include 和 Lib 的所有必要子目录ucrt um shared缺一不可三个错误的本质是同一问题缺ucrtInclude → 编译报 C1083找不到 stddef.h, crtdbg.h缺umLib → 链接报 LNK1104找不到 shell32.lib缺binPATH → 链接后报 LNK1158找不到 rc.exe出问题看 Makefile.pro修改后运行 qmake 会生成 MakefileMakefile.Debug 里的LIBS、INCPATH等变量直接反映最终编译配置是排查的关键最佳的启动方式通过Developer Command Prompt for VS启动 Qt CreatorSDK 路径、环境变量全都自动配好可以彻底避免此类问题
郑州网站建设
网页设计
企业官网