Gcc 在64位CentOS上为ARM构建32位二进制文件

Gcc 在64位CentOS上为ARM构建32位二进制文件,gcc,arm,Gcc,Arm,gcc似乎不接受ARM目标的-m32选项。我不确定gcc在64位Linux上的行为如何,但如果gcc是在64位Linux上运行的ELF32,它会自动生成32位二进制文件吗 如果有,是否有解决办法 提前感谢。您需要使用交叉编译器从运行x86或x86_64的主机上编译ARM,原因是您的主机和目标是两个完全独立的体系结构 交叉编译器通常被配置为只为ARM输出32位或64位二进制文件(不是两者都输出)。大多数ARM设备应用程序只使用32位,因此使用ARM交叉编译器而不使用任何额外参数将构建32位二进制文

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

如果有,是否有解决办法


提前感谢。

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

交叉编译器通常被配置为只为ARM输出32位或64位二进制文件(不是两者都输出)。大多数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位指令。

没有64位ARM。我使用的是由不再支持gcc的SoC供应商定制的gcc。供应商表示gcc在64位Linux上无法正常工作。因此,我正在寻找一种解决方法。工具链的大多数供应商gcc二进制文件都编译为在32位主机(即x86)上运行。并且64位linux主机支持非常平稳地运行32位二进制文件。gcc交叉工具链调用的实际命令与32位或64位主机无关。我自己一直在32位和64位主机上使用MIPS和ARM交叉编译器工具链,没有任何问题。您看到32位主机上构建的二进制文件和64位主机上构建的二进制文件在文件大小上的差异吗?不,对于相同的源代码,文件大小不应该有任何明显的差异。看起来我没有给出好的指令到预处理器。我必须检查一下。谢谢!