2013-02-27 186 views
0

似乎gcc不接受ARM目標的-m32選項。我不確定gcc在64位Linux上的表現如何,但是如果gcc是在64位Linux上運行的ELF32,它會自動生成32位二進制文​​件嗎?在64位CentOS上爲ARM構建32位二進制文​​件

如果是這樣,是否有任何解決方法?

在此先感謝。

+0

http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html – auselen 2013-02-27 09:46:55

+0

有沒有這樣的事情,如64位ARM。 – 2013-03-03 23:18:48

回答

2

您需要使用交叉編譯器從運行x86或x86_64的主機爲ARM編譯,原因是您的主機和目標是2個完全獨立的體系結構。

交叉編譯器通常被配置爲僅輸出ARM的32位或64位二進制文​​件(不是兩者)。大多數ARM設備應用程序僅使用32位,因此使用不帶任何額外參數的arm交叉編譯器將構建32位二進制文​​件。

工具鏈還有其他-m標誌可以指定機器類型,如armv7,arm cortex a-8等,以便進一步優化。您需要查看ARM交叉編譯器的文檔。

至於如何獲得適用於您的目標並在CentOS下運行的正確工具鏈,最好從目標設備供應商的網站開始。

由x86指令集和x86_64(AMD64或Intel EMT64)非常相似,由x86_64版本的gcc提供的-m32選項使得gcc編譯32位二進制文​​件而不是64位。特別是它允許在64位模式下執行32位指令相當容易。

+0

我正在使用由不再支持gcc的SoC供應商定製的gcc。該供應商表示gcc在64位Linux上無法正常工作。所以我正在尋找解決方法。 – HenryK 2013-02-28 00:07:47

+1

工具鏈的大多數供應商gcc二進制文件被編譯爲在32位主機(即x86)上運行。 64位Linux主機可以非常順利地運行32位二進制文​​件。由gcc交叉工具鏈調用的實際命令將與32位或64位主機相同。我自己一直在32位和64位主機上使用MIPS和ARM交叉編譯工具鏈,沒有任何問題。 – Tuxdude 2013-02-28 00:33:50

+0

您是否看到在32位主機上構建的二進制文件和64位上的一個二進制文件之間的文件大小有差異? – HenryK 2013-02-28 05:48:43