一個失誤,編譯器報錯Error: invalid char '[' beginning operand 2 `[ %eax]'

因爲一個疏忽導致找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核心處理器的彙編,當然必須要用對應的交叉編譯器嘍。

發佈了9 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章