当前位置: 首页 > 知识库问答 >
问题:

GCC中Raspberry Pi的交叉编译。从何说起?

万俟靖
2023-03-14

TL/DR:关于为ARM(gnueabi)平台(打算运行在Raspberry Pi设备上)构建GCC4.7.0交叉编译工具链的更多信息,我可以在哪里找到?

我刚刚得到了一个全新的Raspberry Pi,我非常渴望开始为它编程。我已经安装了GCC工具链(我使用的是Arch Linux系统映像),并编译了一些基本程序,所有的工作都很好。

我还尝试编译Boost库,因为我经常在我的项目中使用它们,并且按照说明(./bootstrap.sh+./b2)操作似乎一切都很好,只是编译速度太慢了。我把它打开了几个小时,但它几乎没有通过最初的几个源文件。在我让它运行了一夜之后,我发现构建过程由于RAM不足而中止。

因此,我的猜测是Rasp Pi对于编译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脚本(它对于构建一个相同的carch编译器非常有效),并且成功地构建了binutils和GCC的先决条件,但是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:

我设法为ARM构建了一个4.7GCC工具链(耶!)按照用户dwelch在注释中的建议使用这个shell脚本。我还使用本文作为指导构建了newliblibstdc++。该工具链运行良好,但当我在Raspberry Pi上运行该可执行文件时,它失败了,出现非法指令。那是什么原因造成的呢?

共有1个答案

孟昊空
2023-03-14

我找到了这些如何为你的Raspberry PI构建一个交叉编译器的说明。使用crosstool-ng工具是一次很好的尝试,它大大简化了交叉编译器构建的配置(它有一个很好的基于curses的接口),并且支持GCC4.7。

看起来很管用!

 类似资料:
  • 安装gcc进行ARM交叉编译的问题 我一直在尝试安装gcc-arm-linux-fnueabi包,并且通过几种不同的方法安装了几次,但似乎总是缺少includes目录中的C++文件夹。 我的机器:32&64位英特尔i5处理器,在华硕上运行Ubuntu 14.10 目标设备:Beaglebone(黑色)

  • 问题内容: 我已经安装在Windows机器上的Go 1.2,写了一个虚拟的程序和设置环境变量,并以“AMD64”及“LINUX”。 当我发出“ ”命令时,出现错误: 这是什么意思? 问题答案: 它告诉您需要先构建所有工具,然后才能使用它们。 如果您的Windows GOARCH是amd64,则可以通过运行以下小批处理程序来“构建”所有必需的工具: 如果成功,那么您应该能够执行您所描述的操作(只使用

  • 问题内容: 各位 我正在尝试在Ant和终端上玩Javac Cross编译。在本地和集成环境中,我在一个非常基本的问题上遇到了同样的问题。 我在linux终端(以及在Windows和cmd的cygwin上)上运行此命令: 与Main.java一起使用,仅是System.out.println。 我收到错误消息: 我在本地Windows机器上的配置大致相同,结果完全相同。 我的理解是,交叉编译就是使用

  • 我试图交叉编译一个linux系统的简单hello world程序。 我有以下资料: null 我试图运行/lib/libc.so.0来获取版本信息,但出现了一个分段错误。它似乎用-static编译解决了这个问题。所以我想这是libc库的问题。谢谢你的帮助。

  • 问题内容: 我创建了一个交叉编译的arm可执行文件。我想找到可执行文件的库依赖项。我正在使用ubuntu natty并安装了不包含ldd的arm-linux- gnueabi工具链。有没有可用的工具来查看Linux中arm可执行文件库的依赖性。 问题答案: 这有点儿混乱,但这是我能找到的最好的解决方案,对于基本用途它确实很好用-只需使用其他交叉工具将此脚本另存为“ arm-none-linux-g

  • 我在、Visual C++和交叉编译器的帮助下为构建项目。它运行良好,但如何处理情况时,我需要链接到库?我是否应该用当前的交叉编译器构建所有必需的库?例如如何处理库?