似乎 gcc 不接受 ARM 目标的 -m32 选项。我不确定 gcc 在 64 位 Linux 上的行为如何,但如果 gcc 是在 64 位 Linux 上运行的 ELF32,它会自动生成 32 位二进制文件吗?
如果是这样,是否有任何解决方法?
提前致谢。
您需要使用交叉编译器从运行 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 位指令。