gcc - 在64位环境下执行32位目标文件

标签 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 上也给出了相同的错误。

谢谢,
萨彦

最佳答案

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

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

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

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

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

关于gcc - 在64位环境下执行32位目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3715498/

相关文章:

c++ - 为什么 Visual Studio 2010 调试器看不到静态 const 类成员?

c - C 代码的 x86 反汇编生成 : orq $0x0, %(rsp)

visual-c++ - 在 windows 上测试 ARM 特定代码的最简单方法

c++ - 让软件中断在裸机 Beaglebone Black 中工作

c++ - 如何消除对幂等函数的额外调用?

c - lpm rd,Z 总是在 gcc-avr 中的内联汇编上转换为 lpm rd,Z+

c - 如何使用printf调试linux内核的汇编代码

c - PF4 的中断配置?

linux - 复制相同的 BeagleBone Black 设置

android - 基于 Beaglebone 的 Android(Rowboat)外设?