在64位环境中执行32位目标文件

时间:2010-09-15 07:25:52

标签: gcc arm beagleboard

我为arm-gcc做了一个交叉编译工具链,为arm-elf目标配置binutils,newlib,gcc和gdb。我遇到的问题是,当我在Mac上使用arm-elf-gcc编译程序时,它生成一个32位可执行文件,无法在64位环境中执行。

绕过这个最简单的方法是什么?我可以将32位可执行文件放到arm环境中,但我很想知道我是否可以以任何方式在Mac上执行该文件?

- 增加 -

我之前应该这样做,但是让我告诉我程序的目标是Beagleboard,我希望我能在Mac OS X上使用arm-gcc编译和生成对象将* .o传输到Beagleboard以查看输出。唉,当我执行./hello.o时,它在Beagleboard上也会出现相同的错误。

谢谢,
萨扬

2 个答案:

答案 0 :(得分:4)

有几个问题阻止您在Mac上运行可执行文件。

1)架构。您的Mac可能是x86 / x86_64计算机(或PowerPC),但您的二进制文件是针对ARM体系结构编译的(这是使用交叉编译器的全部要点)。这些指令集不兼容。

2)您的二进制文件链接为ELF目标文件,而Mac则使用Mach-O目标文件格式。您的操作系统无法加载此可执行格式。

3)您的可执行文件链接到newlib(对于某些可能不是Mac OS的目标)而不是Mac OS libc。您的系统调用对于此平台不正确。

如果您的程序是标准的unix可执行文件,您可以使用标准系统gcc简单地编译它,它将运行。否则,您可以在ARM仿真器中运行它,尽管设置起来可能非常复杂。

答案 1 :(得分:1)

32位无关紧要 - 你无法在Mac上执行ARM代码(除非你能找到某种ARM仿真器)。