0

似乎 gcc 不接受 ARM 目标的 -m32 选项。我不确定 gcc 在 64 位 Linux 上的行为如何,但如果 gcc 是在 64 位 Linux 上运行的 ELF32,它会自动生成 32 位二进制文​​件吗?

如果是这样,是否有任何解决方法?

提前致谢。

4

1 回答 1

2

您需要使用交叉编译器从运行 x86 或 x86_64 的主机编译 ARM,原因是您的主机和目标是 2 个完全独立的架构。

交叉编译器通常配置为仅输出 32 位或 64 位 ARM 二进制文件(不是两者)。大多数 ARM 设备应用程序仅使用 32 位,因此使用不带任何额外参数的 arm 交叉编译器将构建 32 位二进制文​​件。

工具链还有其他 -m 标志来指定机器类型,例如 armv7、arm cortex a-8 等,以便进一步优化。您需要查看 ARM 交叉编译器的文档。

至于获得适用于您的目标并在 CentOS 下运行的正确工具链,最好从目标设备供应商的网站开始。

x86_64 版本的 gcc 提供的 -m32 选项使 gcc 编译 32 位二进制文​​件而不是 64 位,因为 x86 指令集和 x86_64(AMD64 或 Intel EMT64)非常相似。特别是它可以很容易地在 64 位模式下执行 32 位指令。

于 2013-02-27T08:32:43.783 回答