我为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/