2010-09-15 75 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

相关问题