我已经在Stack Overflow上问过这个问题,但我想知道是否有人设法为ARM交叉编译(对于x86 / x86-64 Linux主机)构建了GCC 4.7工具链。关于从源代码构建GCC的说明很多,对于4.7之前的GCC版本,有很多可用的交叉编译器,而不仅仅是最新的版本。
在Rasp Pi本身上编译可以很好地工作,但是对于实际目的来说有点太慢了。
我渴望编译,我想使用最新和最好的工具。
我已经在Stack Overflow上问过这个问题,但我想知道是否有人设法为ARM交叉编译(对于x86 / x86-64 Linux主机)构建了GCC 4.7工具链。关于从源代码构建GCC的说明很多,对于4.7之前的GCC版本,有很多可用的交叉编译器,而不仅仅是最新的版本。
在Rasp Pi本身上编译可以很好地工作,但是对于实际目的来说有点太慢了。
我渴望编译,我想使用最新和最好的工具。
Answers:
我找到了这些说明,说明如何为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
/ make
/install
cd
嵌入其中。ct-ng menuconfig
。您将看到一组不错的菜单来配置构建。选择一个合适的Prefix目录。这是将在其中安装编译器和库的目录(任何情况都可以,只要确保该目录为空即可)。
转到目标选项菜单。
您可能还需要设置浮点参数softfp(见这为更多信息),但hardfp更适合Raspbian。
转到C库菜单,然后选择一个。默认值是eglibc,但是它对我而言还不够完善,因此我使用了glibc(最新版本)。
crosstool-ng
ct-ng build
在同一目录中运行。等待一会儿(在我的情况下大约是45分钟),您的交叉编译器应已准备就绪。似乎工作很棒!
我渴望编译,我想使用最新和最好的工具。
实际上,不需要自己构建最新最好的工具。在Raspberry Pi工具GitHub存储库上,您会找到用于交叉编译软件的X86_64
和x686
工具链。
我建议使用x86-linux64-cross-arm-linux-hardfp
工具链,因为它将针对硬浮点进行编译,这将导致系统更快。
$ 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.
注意:如果使用的是现有内核,则必须使用与内核匹配的工具链。HardFP应用程序无法在SoftFP内核上运行。
要使用工具链,只需签出存储库:
git clone https://github.com/raspberrypi/tools.git --depth 1
该--depth
参数意味着您不必等待存储库历史记录也下载完毕(因为我们将不再使用它)。
然后将二进制文件添加到您的PATH变量中:
export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH
或保留PATH:
echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
要使用工具链进行编译,您现在可以添加CROSS_COMPILE
参数。例如,运行时make
:
make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi-
为了使此操作更容易,您可以bashrc
再次将变量保存到:
echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc
现在在编译时使用变量:
make CROSS_COMPILE=${TARGET}
请注意,在64位系统上的centos 6.3上使用ct-ng构建工具链时,由于平台(显然)不支持静态链接,我被迫取消选择静态链接libstdc ++的选项。
同样,虽然最好使用git仓库中的预构建工具链,但该链似乎在Centos 6.3上不起作用-可能是因为它是为更现代的系统或其他东西构建的。我并没有真正尝试将其淘汰。
它帮助我走了。我还添加了一些有关调优的评论。
如果您希望受益于快速主机来为RPI编译内容,我建议通过chroot和QEMU在跨环境中工作。顺便说一下,这可以轻松地取代交叉编译器。
只需使用deboostrap / multistrap设置Debian跨环境
(请参阅QEMU / debootstrap方法一章),您已完成。
Carlson-Minot Inc.为裸机和GNU / Linux ARM目标提供了一个预构建的工具链。该工具链基于Mentor Graphics Sourcery Lite工具链,包含在OS X上构建的修复程序和采用方法。请参见