似乎gcc不接受ARM目标的-m32选项。我不确定gcc在64位Linux上的表现如何,但是如果gcc是在64位Linux上运行的ELF32,它会自动生成32位二进制文件吗?
如果有,是否有解决方法?
提前致谢。
答案 0 :(得分:2)
您需要使用交叉编译器从运行x86或x86_64的主机编译ARM,原因是您的主机和目标是2个完全独立的架构。
交叉编译器通常配置为仅为ARM输出32位或64位二进制(而不是两者)。大多数ARM设备应用程序仅使用32位,因此使用arm交叉编译器而不使用任何额外的参数将构建32位二进制文件。
工具链具有其他-m标志来指定机器类型,例如armv7,arm cortex a-8等,以进一步优化。您需要查看ARM交叉编译器的文档。
至于获取适用于目标并在CentOS下运行的正确工具链,最好从目标设备供应商的网站开始。
x86的x86_64版本提供的-m32选项使得gcc编译32位二进制文件而不是64位二进制文件,因为x86指令集和x86_64(AMD64或Intel EMT64)非常相似。特别是它允许在64位模式下轻松执行32位指令。