如何解决Visual Studio 2019中ARM64的Windows Kits相关编译错误?
解决ARM64迁移编译时系统头文件未定义函数的问题
针对你将X64项目迁移至ARM64后出现的InterlockedIncrement64、ReadNoFence8等系统头文件函数未定义的编译错误,可按以下步骤排查解决:
1. 确认平台工具集配置正确
右键项目 → 属性 → 配置属性 → 常规 → 平台工具集,选择v142 - Visual Studio 2019 (ARM64),确保未误选X64版本的工具集。
2. 检查预处理器宏定义
右键项目 → 属性 → 配置属性 → C/C++ → 预处理器 → 预处理器定义:
- 确保包含
_ARM64_或__arm64__宏(VS会自动为ARM64平台添加,若手动修改过配置可能丢失) - 排查是否错误添加了
_X86_、_AMD64_等X64专属宏
3. 验证Windows SDK与工具集兼容性
- 项目属性 → 配置属性 → 常规 → Windows SDK版本,确认选择的是
10.0.22621.0(与报错中的SDK版本一致) - 打开VS安装器,检查**Windows SDK for Windows 10 (10.0.22621.0)**的ARM64组件是否已勾选安装
4. 排除自定义头文件/宏的干扰
- 检查项目中是否存在自定义的
winbase.h或winnt.h文件,避免覆盖系统头文件 - 在项目主源文件最顶部优先包含
<windows.h>,测试是否仍报错,排除其他自定义头文件的宏冲突
5. 清理编译缓存并重新生成
- 删除项目目录下的
obj、bin文件夹 - 执行Build → Clean Solution,再选择Build → Rebuild Solution,清除X64编译残留的缓存文件
6. 调整C++/CLI配置(若项目为混合模式)
若项目使用C++/CLI:
- 右键项目 → 属性 → 配置属性 → C/C++ → 所有选项 → 公共语言运行时支持,选择ARM64兼容的选项(如
/clr),避免沿用X64专属的CLI设置
错误原因说明
这些系统头文件中的函数依赖平台专属预处理器宏展开定义,若ARM64平台的配置(工具集、宏、SDK)不正确,头文件会跳过这些函数的声明,即使项目未直接调用,也会因系统API内部的依赖触发编译错误。
内容的提问来源于stack exchange,提问作者r18ul
相关产品推荐
相关产品推荐

