我已经在Stack Overflow上问过这个问题,但是我想知道是否有人设法为ARM交叉编译(对于x86 / x86-64 Linux主机)构建了GCC 4.7工具链。有很多关于从源代码构建GCC的说明,也有许多针对4.7之前的GCC版本的交叉编译器,而不仅仅是最新版本。出于实际目的,速度很慢。

我渴望进行编译,我想使用最新和最好的工具。

评论

这似乎也符合我的需要。我们正在为运行Arch Linux的ARM5开发。开发是在Ubuntu Linux 10.04 LTS上进行的(今天,也许我们明天升级它,我还不知道)。当前,我们正在运行GCC 4.4,但是对于C ++ 11语言功能,如果不需要GCC 4.7(最低要求)(如果不需要GCC 4.8(如果可以管理的话)),我需要做的事情将有所帮助。似乎所有可用于ARM的工具链(5个或其他任何工具)都已经过时了。是否可以从源代码构建交叉编译器工具链并支持我们想要的GCC?

我在第二步有一个小问题。实际上,我已经完成了./configure和make命令。一切正常。但是当我提示“安装”时,我收到一条错误消息:安装:缺少文件操作数

另请参阅:raspberrypi.stackexchange.com/q/14587/5538我作为一个骗子将其关闭,但我认为值得在这里链接,因为那里被接受的答案涉及相当多的细节,此处未包含。

#1 楼

我找到了这些说明:如何为Raspberry Pi构建交叉编译器。这是使用crosstool-ng工具的一个很好的演练,该工具简化了配置交叉编译器构建A LOT(它具有基于curses的良好界面)并且支持GCC 4.7。并成功构建了4.7交叉编译器。


先决条件:需要以下软件包:bison,flex,gperf,gawk,libtool,automake,g ++,请确保这些在继续操作之前先安装它们。



首先从这里下载crosstool-ng(我使用的是1.15.2版)。
解开发行版的包装并进行

在文件系统中的某个位置创建一个新目录,以将其内置并插入其中。
运行./configure。您将看到一组不错的菜单来配置构建。
进入路径和其他选项。启用标记为EXPERIMENTAL的Try功能。


选择合适的Prefix目录。这是将在其中安装编译器和库的目录(基本上没问题,只需确保该目录为空)。




注意:它也是重要的是,您具有对所选文件夹的写访问权



转到“目标”选项菜单。


目标体系结构:arm

字节序:小字节序

位数:32位



您可能还希望将浮点参数设置为softfp(有关更多信息,请参阅此内容),但是hardfp更适合Raspbian。
转到“操作系统”菜单,然后将“目标OS”更改为linux。
转到C编译器菜单,然后选择gcc版本4.7.0(本文建议使用Linaro,但我设法使其与香草gcc一起使用)。还选择了您希望能够编译的其他语言(C ++,Fortran等)

转到C库菜单,然后选择一个。默认值为eglibc,但是它对我而言构建得并不好,所以我使用了glibc(最新版本)。如果未安装Subversion,则可能无法构建,因为无法从资源库中检索源代码发展。请参见eglibc这么久。默认使用glibc。


在保存更改的同时退出配置工具。
在同一目录中运行make。等待一会儿(以我为例,大约需要45分钟),您的交叉编译器应该已经准备好了。

评论


哇,45分钟是很长的时间。您的系统有多快?我现在在等

–活动
2012年6月14日15:46

好吧,也许它要少一些,但是它必须先编译所有先决条件,然后再编译bintools和gcc以及libc和libstdc ++,所以45分钟对我来说听起来很合理。

–user13
2012年6月14日15:55

如果经过测试,我们是否可以添加有关如何正确安装这些文件和更新路径的详细信息?

–亚历克斯·张伯伦
2012年6月27日在16:38

另外,我认为我们应该使用hardfp,因为RPi支持它。

–亚历克斯·张伯伦
2012年6月27日16:39

可能是,但是IIRC,Arch的GCC已配置为softfp。我现在没有时间进行测试,但是我已经制作了答案社区Wiki,请随时进行改进。

–user13
2012年6月28日上午11:10

#2 楼


我很想编译,我想使用最新最好的工具。


实际上,不需要最新的最好的工具来构建你自己在Raspberry Pi工具GitHub存储库上,您会找到用于交叉编译软件的X86_64x686工具链。系统要快得多。 HardFP应用程序无法在SoftFP内核上运行。


要使用工具链,只需检查存储库即可:

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.


x86-linux64-cross-arm-linux-hardfp参数将意味着您不必等待存储库历史记录也下载完毕(因为我们将不再使用它)。

然后将二进制文件添加到PATH变量中:

git clone https://github.com/raspberrypi/tools.git --depth 1


或保留路径:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH


要使用工具链进行编译,现在可以添加--depth参数。例如,当运行CROSS_COMPILE时:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc


或者为了简化操作,您可以再次将变量保存到make: />
,现在在编译时使用该变量:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 


评论


这似乎是gcc-4.5.1。

–user13
2012年7月18日在10:57

@Tibor不好吗?

–活动
2012年7月18日在11:04

@Jivings完全不能回答问题!

–亚历克斯·张伯伦
2012年7月18日在11:26

我不同意不赞成票。 @AlexChamberlain它为构建自己的工具链的耗时行为提供了一种有价值的替代方法。

–活动
2012年7月18日在15:11

@Jivings:这非常有帮助。同时,它是gcc4.7.1(我有史以来最好的),浮点立即可用。我无法使用克里斯(Tibor)发表的原始描述来使浮点数有效。非常感谢。

–user3802
2012年12月15日在9:05

#3 楼

请注意,在64位系统上的centos 6.3上使用ct-ng构建工具链时,由于平台(显然)不支持静态链接,我被迫取消选择静态链接libstdc ++的选项。

同样,虽然最好使用git仓库中的预构建工具链,但该链似乎在Centos 6.3上不起作用-可能是因为它是为更现代的系统或其他东西构建的。我并没有真正尝试将其消耗掉。

#4 楼

本指南可能会有所帮助。

它帮助我获得了发展。我还添加了一些有关调优的评论。

#5 楼

如果您希望受益于快速主机来为RPI编译内容,我建议通过chroot和QEMU在跨环境中工作。这样就可以轻松地取代交叉编译器了。完成。

#6 楼

万一您要从OS X进行交叉编译:这是一篇很棒的文章(也是我发现的唯一一篇在Web上工作的文章)。 ,因此您只需要下载,解压缩并挂载dmg映像。就是这样,您可以进行交叉编译了。

#7 楼

如果您安装了Ubuntu 64位版本和Raspberry Pi SVN的工具,则会出现错误:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory


仅运行:

#8 楼

Carlson-Minot Inc.为裸机和GNU / Linux ARM目标提供了一个预构建的工具链。该工具链基于Mentor Graphics Sourcery Lite工具链,包含在OS X上构建的修复程序和采用方法。请参见


ARM Linux
ARM EABI

>