2013-02-27 190 views
0

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

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

在此先感谢。

+0

http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html – auselen 2013-02-27 09:46:55

+0

有没有这样的事情,如64位ARM。 – 2013-03-03 23:18:48

回答

2

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

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

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

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

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

+0

我正在使用由不再支持gcc的SoC供应商定制的gcc。该供应商表示gcc在64位Linux上无法正常工作。所以我正在寻找解决方法。 – HenryK 2013-02-28 00:07:47

+1

工具链的大多数供应商gcc二进制文件被编译为在32位主机(即x86)上运行。 64位Linux主机可以非常顺利地运行32位二进制文​​件。由gcc交叉工具链调用的实际命令将与32位或64位主机相同。我自己一直在32位和64位主机上使用MIPS和ARM交叉编译工具链,没有任何问题。 – Tuxdude 2013-02-28 00:33:50

+0

您是否看到在32位主机上构建的二进制文件和64位上的一个二进制文件之间的文件大小有差异? – HenryK 2013-02-28 05:48:43