TL/DR:我在哪里可以找到有关为 ARM (gnueabi) 平台(旨在在 Raspberry Pi 设备上运行)构建 GCC 4.7.0 交叉编译工具链的更多信息?
我刚刚得到了一个全新的 Raspberry Pi,我非常渴望开始为它编程。我已经成功安装了 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 构建一直失败并出现许多神秘错误。我真的迷路了,所以我非常感谢你的帮助。
Raspberry Pi 上的 GCC 配置为
--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:
按照用户 dwelch 在评论中的建议,我设法使用这个 shell 脚本为 ARM 构建了一个 4.7 GCC 工具链(耶!)。我还构建newlib
并libstdc++
使用这篇文章作为指南。工具链工作正常,但是当我在 Raspberry Pi 上运行可执行文件时,它会以Illegal instruction
. 这可能是什么原因?