您的位置:首页 > 运维架构

一个失误,编译器报错Error: invalid char '[' beginning operand 2 `[ %eax]'

2012-10-28 20:51 501 查看
因为一个疏忽导致找bug几小时,上网搜寻不得,现写于此,愿向我一样被这一小概率事件折磨的人早点解脱。。。

gprs.c: Assembler messages:

gprs.c:329: Error: invalid char '[' beginning operand 2 `[ %eax]'

gprs.c:329: Error: invalid char '[' beginning operand 2 `[ %eax]'

gprs.c:329: Error: invalid char '[' beginning operand 2 `[ %edi]'

gprs.c:329: Error: invalid char '[' beginning operand 2 `[ %ebx]'

gprs.c:329: Error: invalid char '[' beginning operand 2 `[ %edi]'

为一个嵌入式设备编程,编译器报错如上,源代码如下:

static inline void _outl(unsigned long addr, unsigned long dat) {

asm volatile (

"str %1, [ %0 ]\n"

:

: "r" (addr), "r" (dat)

: "memory"

);

}

百思不得其解,后发现原因:

Makefile中前段时间在电脑上调试程序把Makefile加了一行:

CC=arm-none-linux-gnueabi-gcc

CC :=gcc <--------------此行为新加行,意思是把CC变量重新赋值'gcc',也就是改交叉编译为直接编译

注释掉那行后编译通过。

原因:

这是一个C语言嵌入汇编的实例,汇编代码是目标arm核心处理器的汇编,当然必须要用对应的交叉编译器喽。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐