2

我为 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 上也会出现同样的错误。

谢谢,
萨扬

4

2 回答 2

4

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

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

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

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

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

于 2010-09-15T08:24:38.720 回答
1

它是 32 位的事实是无关紧要的——你不能在 Mac 上执行 ARM 代码(除非你能找到某种 ARM 模拟器)。

于 2010-09-15T08:12:08.553 回答