2012-10-31 42 views
3

我收到以下錯誤,而試圖編譯一些代碼使用GCC錯誤在編制ARM

gcc -mcpu=cortex-m4 arm.c 

`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead. 
arm.c:1: error: bad value (cortex-m4) for -mtune= switch 

我下面GCC 4.7.1 ARM options了ARM Cortex-M4 。不知道我是否缺少一些關鍵選項。任何使用GCC for ARM的kickstart也會很有幫助。

+0

你確定它不是你的主機平臺的'gcc'嗎? 'gcc -dumpmachine'說什麼? – starblue

+1

'gcc -dumpmachine'說'x86_64-unknown-linux-gnu'。我想這意味着我將不得不構建GCC來爲ARM轉儲代碼。是對的嗎 ? – Jean

+0

是的。如果您想調試,至少需要'binutils'和'gcc','gdb'。搜索說明如何在網絡上執行此操作。 – starblue

回答

4

正如註釋中暗含的starblue,該錯誤是因爲您使用的是爲編譯x86 CPU而構建的本機編譯器,而不是用於編譯爲ARM的交叉編譯器。

GCC只支持任何給定編譯器二進制文件中的單個通用體系結構類型 - 因此,雖然GCC的同一副本可以編譯爲32位和64位x86機器,但不能編譯爲x86和ARM具有相同的GCC副本 - 您需要一個ARM特定的GCC。 (正如auselen所說,獲得預構建的應用程序將爲您節省大量的工作,即使您只是將其作爲起點來設置它,您需要有GCC,binutils,和一個C庫作爲最低限度,這些都是獨立的開源項目,預建版本已經完成了合併工作。我會推薦Sourcery CodeBench Lite,因爲這是我公司的產品,我認爲這是一個公平的好的。)

0

由於錯誤消息說-mcpu已被棄用,您應該使用其他選項。然而「deprectated」只是意味着它的使用可能不會繼續得到支持;它仍然會工作。

的ARM Cortex-M4是ARM架構V7E-M,所以你應該使用-march=armv7-m(文檔沒有具體列出armv7e-m,但可能已被添加自文檔的上次更新該E基本上是M3之間的區別和M4 - DSP指令,因此編譯器不會生成利用這些指令的代碼,使用ARM的Cortex-M DSP庫可能是使用這些指令來使您的應用程序受益的最佳方法。如果您的器件具有FPU,那麼其他選項將需要啓用代碼生成

0

就像其他人已經指出的那樣,您正在爲您的主機使用編譯器,並且您需要一個編譯器來生成代碼你的目標處理器(交叉編譯器)。就像@Brooks建議的那樣,你可以使用預先構建的工具鏈,但是如果你想推出自己的交叉編譯器libc和binutils,那麼有一個很好的工具叫做Crosstool-NG。它大大簡化了構建一個爲特定處理器生成代碼而優化的交叉編譯器的過程,因此您不會陷入通用預構建工具鏈中,該工具鏈通常爲一系列兼容處理器構建代碼(例如,您可以調整工具鏈爲您的特定目標生成ASM,或爲特定於您的處理器的硬件FPU生成浮點代碼,而不是僅使用軟件浮點例程(默認爲大多數預建的工具鏈))。