Visual Studio 2019编译ARM64时出现"identifier not found"错误求助
问题原因
_InterlockedO64、ReadAcquire8、WriteRelease64这类标识符是x64/x86架构专属的编译器内置同步与内存屏障函数。ARM64的指令集、内存模型和x64差异明显,Visual Studio 2019针对ARM64并未提供这些同名的内置函数,因此编译ARM64目标时会触发“identifier not found”错误。
解决办法
替换为ARM64兼容的内置函数
微软编译器针对ARM64提供了等价的同步/内存操作函数,对应替换关系如下:_InterlockedO64:大概率是代码笔误,x64下正确函数为_InterlockedOr64,ARM64同样支持该函数ReadAcquire8:替换为ARM64的_ReadAcquire64(若操作的是8位数据,可使用_ReadAcquire8,需确认数据类型匹配)WriteRelease64:ARM64下直接使用_WriteRelease64即可,该函数在ARM64平台受支持
用条件编译区分架构
在代码中通过预编译指令隔离不同架构的实现,避免跨平台编译冲突:#include <intrin.h> // 必须包含的头文件 #ifdef _M_X64 // x64专属实现 _InterlockedOr64(&target_var, op_value); ReadAcquire8(&target_var); WriteRelease64(&target_var, new_value); #elif _M_ARM64 // ARM64专属实现 _InterlockedOr64(&target_var, op_value); _ReadAcquire64(&target_var); _WriteRelease64(&target_var, new_value); #endif检查编译配置与头文件
- 确保所有使用这些函数的源文件都包含
<intrin.h>,ARM64的内置同步函数依赖该头文件 - 检查ARM64目标的项目属性:进入
C/C++ -> 常规,确认“启用内置函数”选项处于开启状态 - 若使用的是早期VS2019版本,建议更新到最新补丁,部分旧版本对ARM64内置函数的支持不完善
- 确保所有使用这些函数的源文件都包含
内容的提问来源于stack exchange,提问作者Baab
相关产品推荐
相关产品推荐

