2010-09-15 231 views
2

我爲arm-gcc製作了一個交叉編譯工具鏈,爲arm-elf目標配置了binutils,newlib,gcc和gdb。我遇到的問題是,當我在Mac上使用arm-elf-gcc編譯程序時,它會生成一個32位可執行文件,但無法在64位環境中執行。在64位環境下執行32位目標文件

繞過這個最簡單的方法是什麼?我可以將32位可執行文件放在arm環境中,但我有興趣知道我是否可以用任何方式在我的Mac中執行該文件?

--Added--

我應該這樣做之前,但讓我告訴我的程序的目標是Beagleboard,而我期待,我將編譯和使用ARM-GCC生成的對象在我的Mac OS X上,並將* .o傳送到Beagleboard以查看輸出。唉,在我做一個./hello.o的時候,它在Beagleboard上給出了同樣的錯誤。

感謝,
薩揚

回答

4

有幾個問題阻止您在Mac上運行您的可執行文件。

1)建築。您的Mac可能是x86/x86_64機器(或PowerPC),但是您的二進制文件是爲ARM體系結構編譯的(這是使用交叉編譯器的關鍵)。這些指令集不兼容。

2)您的二進制文件鏈接爲ELF目標文件,而Mac使用Mach-O目標文件格式。您的操作系統無法加載此可執行格式。

3)您的可執行文件與newlib(對於某些可能不是Mac OS的目標)而不是Mac OS libc鏈接。您的系統調用對於此平臺不正確。

如果你的程序是一個標準的unix可執行文件,你可能可以簡單地用標準系統gcc進行編譯,它會運行。否則,您可以在ARM模擬器中運行它,但設置起來可能相當複雜。

+0

謝謝你讓我明白。可能會搜索ARM模擬器。 – Sayan 2010-09-15 14:39:02

1

,它是32位無關的事實 - 你不能在Mac上運行ARM代碼(除非你能找到某種ARM模擬器)。

+0

好吧,只是想知道這一點。可能會搜索ARM模擬器。謝謝! – Sayan 2010-09-15 14:38:14

+0

Qemu硬臂仿真內置。 – doron 2010-09-16 14:03:23

相關問題