51

TL/DR : ARM (gnueabi) プラットフォーム用の GCC 4.7.0 クロスコンパイル ツールチェーンの構築に関する詳細情報はどこにありますか (Raspberry Pi デバイスでの実行を目的としています)?

新品の Raspberry Pi を手に入れたばかりで、プログラミングを始めたいと思っています。GCC ツールチェーン (私は Arch Linux システム イメージを使用しています) をインストールし、いくつかの基本的なプログラムをコンパイルして、すべて正常に動作しました。

また、Boost ライブラリをプロジェクトでよく使用するため、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) はないようです。私はおそらく自分で構築する必要がありますが、これは重要な作業のようです (私は試みて失敗しました)。できれば最近のバージョンの 1 つについて、GCC クロスコンパイラを構築するために従うべきチュートリアルを知っている人はいますか?

この優れたシェル スクリプト(同じアーキテクチャのコンパイラをビルドするのに最適) を試してみましたがbinutils、GCC の前提条件を正常にビルドできましたが、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:

コメントでユーザーdwelchが提案したように、このシェルスクリプトを使用して、ARM用の4.7 GCCツールチェーンを構築することができました(やった!) 。また、この記事をガイドとして作成しnewliblibstdc++使用しました。ツールチェーンは正常に動作しますが、Raspberry Pi で実行可能ファイルを実行すると、. その原因は何ですか?Illegal instruction

4

8 に答える 8

25

これらの手順を見つけました。RaspberryPi用のクロスコンパイラを構築する方法crosstool-ngこれは、クロスコンパイラービルドA LOT(優れたcursesベースのインターフェイスを備えています)の構成を簡素化し、GCC4.7をサポートするツールを使用するための優れたウォークスルーです。

うまくいくようです!

于 2012-06-13T14:48:44.573 に答える
4

http://github.com/dwelch67/raspberrypi buildgccディレクトリには、4.7 gcc/gnuと3.0clang/llvmの両方のスクリプトがあります。opencoresのmpxプロジェクトのスクリプトから派生したgnuは、gdbを切り取り、libgcc、glibcなどがコンパイラーに渡しました。他のものが必要な場合は、ミップ用にアームをカットアンドペーストします。

于 2012-06-13T15:01:29.257 に答える
4

Windows で Raspberry Pi クロス コンパイラをビルドする方法のステップ バイ ステップ ガイドを次に示します。エラーが発生する理由は、Illegal Instruction最新の Raspbian が hardfp 対応であり、hardfp をサポートするには gcc と eglibc に適切なパッチが必要であるためです。そうしないと、生成されたコードは異なる ABI を使用します。つまり、関数の引数を異なるレジスタに渡すため、実行時にクラッシュします。

また、GCC を ARMv7 (Raspebby Pi は ARMv6) 用に誤って構成すると、Illegal Instructionエラーが発生する可能性があります。GCC を構成するときは、必ず--with-arch=armv6オプションを指定してください。

ただし、上記のガイドは GCC 4.6.3 に基づいています。しかし、GCC 4.7 でも動作するはずです。

于 2012-09-26T08:05:02.657 に答える
2

4.7 gccは見つかりませんでしたが、4.6しか見つかりませんでした。詳細については、このページのガイドラインに従って、かなり古いUbuntuマシン(1Ghz、768MB RAM)でPiのカーネルをコンパイルしました。 カーネルのコンパイル

ビルドには約90分かかりましたが、Piでは6時間かかることが示唆されています。カーネルはPiで正常に動作します。おそらく、x86Linuxマシンで他のプロジェクトをクロスコンパイルするためにこれらのガイドラインを適応させることができます。

于 2012-06-12T09:52:50.570 に答える
1

Raspberry-GCC-4.7.3ツールチェーンを試すことができます。

これは、gnueabi を使用した hardfp を備えた armv6 用のビルド済み gcc-4.7.3 ツールチェーンです。ラズベリーターゲット用にc ++ 11をクロスコンパイルするために使用しています。

Linux x86_64 ホストでのみ動作することに注意してください。

于 2012-12-21T12:01:17.483 に答える
0

お気づきのように、Raspberry Pi 自体でのビルドは低速ですが、(クロスコンパイルではないため) メモリが不足しない限り信頼性があります。おそらく、メモリとスワップの設定を微調整して、より大きなビルドを可能にすることができます (高速ではないにしても)。フォーラムでは、SD にルート パーティションを配置し、USB ドライブにユーザー パーティションを配置することについて話していることを知っています。もちろん、高速な (クラス 6 以上の) SD カードを入手することで、おそらく違いが生じるでしょう。時間の経過とともに、ソフトウェアが改善されるにつれてコンパイルのパフォーマンスが向上する可能性があります。あるいは、Raspberry Pi 2 のチップセットが改善され、RAM が増えるかもしれません。:-)

于 2012-07-02T17:41:35.880 に答える