Qt Creator调用nmake时找不到objbase.h,MSVC2015编译Qt项目失败
解决Qt 5.15.2 MSVC2015 64bit编译时找不到objbase.h的问题
问题场景
在Windows 10系统使用Desktop Qt 5.15.2 MSVC2015 64bit套件构建项目时,nmake抛出编译错误:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\Ole2.h:37: error: C1083: Cannot open include file: 'objbase.h': No such file or directory ... NMAKE:-1: error: U1077: ""C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\HostX64\x64\cl.EXE"" : return code '0x2' NMAKE:-1: error: U1077: ""C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\HostX64\x64\nmake.exe"" : return code '0x2'
示例项目"addressbook"也出现相同错误,但VS2022指向Qt安装后可正常编译Qt Widget项目。项目开发数月,近一周才出现问题,已尝试重装Qt 5.15.2、搜索系统未找到objbase.h、通过Build Tools重装MSVC2015,均无效,怀疑公司Microsoft Intune误删Windows SDK文件。MinGW 64bit可编译示例项目,但项目依赖MSVC特定预处理指令,需解决MSVC编译问题。
解决方案
1. 重新安装对应版本的Windows SDK
objbase.h是Windows SDK的核心头文件,正常存放在C:\Program Files (x86)\Windows Kits\10\Include\<SDK版本>\shared\objbase.h,系统找不到说明该SDK组件缺失:
- 打开Visual Studio Installer,选择"修改"已安装的VS2022或MSVC Build Tools
- 切换到"单个组件",找到报错中对应的Windows SDK版本(如10.0.19041.0),勾选后点击"修改"完成重装
- 若找不到该版本SDK,可安装最新兼容的Windows 10 SDK版本,后续在Qt Creator中指定新的SDK路径
2. 手动修正Qt Creator的工具链环境变量
确保Qt Creator的MSVC2015工具链包含完整的SDK路径:
- 打开Qt Creator,进入
工具 > 选项 > 构建和运行 > 工具链 - 选中MSVC2015 64bit工具链,点击"编辑"
- 在"环境"标签页,检查
INCLUDE变量是否包含Windows SDK的三个核心目录:INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt;... - 若路径缺失,手动添加对应目录后保存,重新构建项目
3. 隔离VS2022与MSVC2015的环境冲突
当前环境中VS2022的编译器被Qt调用,导致工具链不匹配:
- 进入Qt Creator的
工具 > 选项 > 构建和运行 > 编译器 - 确认MSVC2015 64bit对应的编译器路径为
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe,而非VS2022的cl.exe路径 - 同时检查
LIB变量,确保指向MSVC2015的库目录(C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64等)
4. 规避Intune对系统目录的管控
若确认是Intune误删SDK文件,可尝试:
- 从同版本Windows系统的机器上拷贝缺失的objbase.h及相关SDK头文件到对应目录
- 将Windows SDK安装到非系统盘(如D盘),在Qt Creator中指定新的SDK路径,避开Intune对C盘的管控
内容的提问来源于stack exchange,提问作者LazyDaelaSaga
相关产品推荐
相关产品推荐

