Gcc 在64位环境中执行32位对象文件

Gcc 在64位环境中执行32位对象文件,gcc,arm,beagleboard,Gcc,Arm,Beagleboard,我为arm-gcc制作了一个交叉编译工具链,为arm-elf目标配置了binutils、newlib、gcc和gdb。我遇到的问题是,当我在Mac上用arm elf gcc编译一个程序时,它会生成一个32位的可执行文件,无法在64位环境中执行 最简单的规避方法是什么?我可以将32位可执行文件放在arm环境中,但我想知道我是否可以在Mac中以任何方式执行该文件 -增加- 我以前应该这样做,但我要告诉大家,我的程序的目标是a,我希望在Mac OS X上使用arm gcc编译和生成对象,并将*.o传输

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

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

-增加-

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

谢谢,
Sayan

它是32位的事实是不相关的-除非你能找到某种ARM模拟器,否则你不能在Mac上执行ARM代码。

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

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

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

3您的可执行文件是针对某些目标的newlib链接的,这些目标可能不是Mac OS而不是Mac OS libc。您的系统调用不适用于此平台


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

好的,我只是想知道这一点。可能会搜索ARM仿真器。谢谢内置Qemu硬臂仿真。感谢您让我理解。可能会搜索ARM仿真器。