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

将代码从GCC移植到LLVM/CLANG时内联汇编传参失败求助

问题分析与解决

错误根源

你遇到的括号缺失错误是编译器解析内联汇编时的误报,真正问题在于:
你的内联汇编使用了ARM架构的指令(mov r3, %0中的r3是ARM专属寄存器),但你使用的是原生GCC(默认编译宿主架构代码,比如x86/x86_64),编译器无法识别ARM指令,导致语法解析逻辑混乱,抛出了错误的提示信息。

解决方法

根据你的实际需求选择对应方案:

方案1:编译ARM架构代码

如果你的目标平台是ARM,需要使用ARM交叉编译器编译,而非原生GCC:

# 示例:使用ARM交叉编译器(需提前安装对应工具链)
arm-linux-gnueabi-gcc -c ajay.c

方案2:适配x86/x86_64架构

如果是在x86/x86_64环境下测试内联汇编,修改代码为对应架构的指令:

#define TEST_VALUE 0x1234

// x86架构版本
__asm__("mov eax, %0" : : "r" (TEST_VALUE));

// 或者x86_64架构版本
// __asm__("mov rax, %0" : : "r" (TEST_VALUE));

修改后用原生GCC编译即可正常通过。

补充说明

GCC内联汇编的语法框架是通用的,但汇编指令本身是架构相关的。编写内联汇编时,必须确保指令与编译目标架构一致,否则会触发各种语法解析错误(甚至像这样的误报)。

内容的提问来源于stack exchange,提问作者Ajay Garg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:28:09