Cross-compilation for Raspberry Pi in GCC. Where to start?
TL/DR: Where can I find more information about building a GCC 4.7.0 cross-compiling toolchain for ARM (gnueabi) platform (intended to run on a Raspberry Pi device)?
我刚买了一个全新的覆盆子圆周率,我非常渴望开始为它编程。我已经成功地安装了gcc工具链(我使用的是archLinux系统映像),并编译了一些基本程序,这些程序都运行良好。
我也试着编译Boost库,因为我经常在我的项目中使用它们,除了编译速度非常慢之外,通过遵循说明(
所以,我的猜测是,RASPPI对于编译诸如boost之类的大小的东西来说,只是动力不足。所以,我想到了交叉汇编。然而,尽管网上有很多关于ARM交叉编译的信息,我还是觉得很困惑。从哪里开始?
我的Raspberry PI上有一个最新的gcc版本(4.7.0),所以理想情况下我希望使用相同的版本进行交叉编译。在哪里可以获得用于ARM的GCC4.7.0工具链?(我将在x86 CentOS 6.2上编译)
编辑:
我释放了不需要的GPU内存,并在USB驱动器上设置了一个4GB交换分区,而构建文件在一个NFS共享上。Boost现在编译速度快得多,所以它是可管理的。不过,我还是想知道如何在我的x86 PC上建立一个用于交叉编译的GCC4.7工具链,因为我打算进行大量编译,我希望它尽可能快。
编辑2:
由于GCC4.7.0相对较新,所以似乎没有预构建的交叉编译器(i386->arm)。我可能要自己做一个,这似乎是一个不平凡的任务(我已经尝试过,但失败了)。有人知道构建GCC交叉编译器的教程吗,希望是最新版本的教程?
我试过使用这个很棒的shell脚本(它对于构建相同的arch编译器非常有用),并且我成功地构建了
树莓pi上的gcc配置为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --disable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release --host=arm-unknown-linux-gnueabi --build=arm-unknown-linux-gnueabi |
编辑3:
我设法为ARM构建了一个4.7 gcc工具链(yay!)使用用户dwelch在注释中建议的shell脚本。我还使用本文作为指南构建了
型
我发现了这些说明如何为您的树莓pi构建一个交叉编译器。这是使用
看起来效果不错!
型
下面是如何在Windows中构建Raspberry PI交叉编译器的分步指南。您得到
同样,错误配置armv7的gcc(raspebby pi是armv6)也可能导致
以上链接的指南基于GCC 4.6.3。但我想它也应该适用于GCC4.7。
型
http://github.com/dwelch67/raspberrypi buildgcc目录有一个用于4.7 gcc/gnu和3.0 clang/llvm的脚本。GNUone是从OpenCores的MPX项目的脚本派生而来的,我去掉了gdb和libgcc、glibc等,并把它放到了一个编译器中。如果你想要其他的东西,为mips剪切和粘贴手臂。
型
我找不到4.7 gcc,只有4.6。为了获取信息,我在一台相当老的Ubuntu机器(1GHZ,768MB RAM)上按照本页的指南编译了PI的内核:编译内核的方法
建造花费了大约90分钟,与6小时相比,建议它将花费在PI上。内核在pi上运行良好。也许您可以修改这些准则,以便在x86 Linux机器上交叉编译其他项目。
型
DockCross项目是完全除臭的工具链的一个很好的起点,您不仅可以为PI构建,还可以为其他任何东西构建。以下是命令:
1 2 3 | docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7 chmod +x ./dockcross-linux-armv7 ./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm' |
它也内置了EDOCX1[4]。
型
您可以尝试使用raspberry-gcc-4.7.3工具链。
它是一个预先构建的GCC-4.7.3工具链,用于使用gnueabi的带有hardfp的ARMV6。我用它来交叉编译C++ 11的RasbReRIAN目标。
请注意,它只在Linux x86_64主机上工作。
型您可以在此最新的Github存储库中尝试我的开源预编译/预编译GCC Cross&native Compiler Binaries for Raspberry PI:
此项目包含最新的预编译/预构建的Raspberry PI GCC Cross&native编译器二进制文件集,可节省大量时间(不需要任何编译或错误处理)。只需提取、链接和享受机器中的完整gcc(覆盆子PI)功能即可。您可以使用Raspberry PI的本机编译器(可以与旧的&slow 6.3.0 gcc一起使用),或者在任何Linux机器上使用交叉编译器(在最新的Ubuntu/Bionic X64上测试)来为您的Raspberry PI编译程序。所有这些编译器二进制文件都是Raspberry PI硬件,经过优化以提高整体性能。
支持的GCC版本:
- 百万千克1一般合同条款第6.3.0款百万千克1百万千克1一般合同条款第7.4.0款百万千克1百万千克1一般合同条款第8.2.0款百万千克1百万千克1一般合同条款第8.3.0款百万千克1
型
支持覆盆子PIS:
- 百万千克1当前支持所有Raspberry PI版本/模型。百万千克1百万千克1任何其他具有类似硬件配置的ARM设备也可以工作。百万千克1
型
支持的环境:
- 百万千克1交叉编译器:当前支持所有Linux发行版(x32/x64)。百万千克1百万千克1本机编译器:支持所有带有Raspbian操作系统的Raspberry PI版本/模型。其他操作系统可能/可能不工作。百万千克1
型
支持的语言:
- 百万千克1C++百万千克1百万千克1C百万千克1百万千克1福特兰百万千克1
型
型
正如您所注意到的,在Raspberry PI上构建本身是缓慢的,但是是可靠的(因为它不是交叉编译的),前提是您没有耗尽内存。也许可以调整内存并交换设置以使更大的构建成为可能(如果不是很快的话)。我知道在论坛上,人们谈论的是在sd上放置根分区,在usb驱动器上放置用户分区,当然,获得一张快速(6级或更高级别)的sd卡可能会有所不同。随着时间的推移,编译性能可能会随着软件的改进而提高。或者,也许覆盆子Pi2将有一个改进的芯片组和更多的RAM。:-)