GCC中的Raspberry Pi的编译。 从哪儿开始?
TL / DR :我在哪里可以找到关于为ARM(gnueabi)平台(旨在运行在Raspberry Pi设备上)构建GCC 4.7.0交叉编译工具链的更多信息?
我刚刚买了一个全新的树莓派,我非常渴望为它开始编程。 我设法安装了GCC工具链(我正在使用Arch Linux系统映像)并编译了一些基本程序,所有工作都很好。
我也尝试编译Boost库,因为我经常在我的项目中使用它们,并且除了编译速度很慢之外,所有内容似乎都可以正常工作( ./bootstrap.sh
+ ./b2
)。 我将它搁置了几个小时,但几乎没有超过前几个源文件。 在我离开它运行了一晚之后,我发现由于RAM短缺而中止了构建过程。
所以,我的猜测是,Rasp Pi仅仅因为编译Boost等大小的东西而动力不足。 所以,我认为是交叉编译。 但是,尽管在线提供了大量有关ARM交叉编译的信息,但我觉得它很让人困惑。 哪里开始?
我的Raspberry Pi最近有一个GCC版本(4.7.0),所以我希望能够使用相同的版本进行交叉编译。 我在哪里可以获得ARM的GCC 4.7.0工具链? (我将在x86 CentOS 6.2上编译)
编辑:
我释放了不需要的GPU内存,并在USB驱动器上设置了4GB的交换分区,而构建文件位于NFS共享上。 Boost现在编译的速度要快得多,因此它是可管理的。 我仍然想知道如何在x86 PC上建立一个GCC 4.7工具链来进行交叉编译,因为我打算做大量的编译工作,并希望它尽可能快。
编辑2:
由于GCC 4.7.0相对较新,似乎没有预构建的交叉编译器(i386-> ARM)。 我可能必须自己创建一个,这似乎是一项不重要的任务(我已经尝试并失败了)。 有没有人知道一个教程要建立一个GCC交叉编译器,希望为最近的版本之一?
我已经尝试过这个很棒的shell脚本(它可以很好地构建一个相同的脚本编译器),并且我已经成功构建了binutils
和GCC的先决条件,但是随后GCC构建失败,出现了许多隐含的错误。 我真的迷失在这里,所以我会非常感谢你的帮助。
GCC在Raspberry Pi上配置了
--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:
我设法使用这个shell脚本为用户建议的ARM(yay!)构建一个4.7 GCC工具链,如用户在评论中所建议的。 我还使用这篇文章作为指导,构建了newlib
和libstdc++
。 工具链可以正常工作,但是如果我在Raspberry Pi上运行可执行文件,它会因为Illegal instruction
而失败。 这可能是什么原因?
我发现了这些说明如何为Raspberry Pi构建交叉编译器。 通过使用crosstool-ng
工具可以简化配置交叉编译器构建一个LOT(它有一个很好的基于curses的接口),它支持GCC 4.7。
似乎很好!
以下是分步指导如何在Windows中构建Raspberry Pi交叉编译器。 你得到Illegal Instruction
错误的原因是最新的Raspbian是hardfp启用的,并且需要适当的补丁来支持gf和eglibc来支持hardfp。 否则,生成的代码将使用不同的ABI,即在不同的寄存器中传递函数参数,以便在运行时崩溃。
还错误地配置了GCC for ARMv7(Raspebby Pi是ARMv6)可能会导致Illegal Instruction
错误。 确保在配置GCC时指定--with-arch=armv6
选项。
上面的链接基于GCC 4.6.3。 但我想它也适用于GCC 4.7。
http://github.com/dwelch67/raspberrypi buildgcc目录有一个4.7 gcc / gnu和3.0 clang / llvm的脚本。 从opencores的mpx项目的脚本中得到的gnu,我删掉了gdb和libgcc,glibc等,把它放到了编译器中。 如果你想要其他的东西剪切和粘贴胳膊mips。
链接地址: http://www.djcxy.com/p/15239.html上一篇: compilation for Raspberry Pi in GCC. Where to start?
下一篇: What is the benefit of terminating if … else if constructs with an else clause?