クロスコンパイル用のGCC 4.7ツールチェーンを作成するにはどうすればよいですか?


82

私はすでにStack Overflowでこの質問をしましたが、ARMクロスコンパイル用のGCC 4.7ツールチェーン(x86 / x86-64 Linuxホスト用)を誰かが構築できたかどうか知りたいです。ソースからGCCをビルドするための多くの指示と、4.7より前のGCCバージョン用の多くの利用可能なクロスコンパイラがありますが、最新のものではありません。

Rasp Pi自体でのコンパイルは正常に機能しますが、実際の目的には少し遅すぎます。

私はコンパイルしたいと思っており、最新の最高のツールを使用したいと思います。


これは、私がする必要があることと同じように思えます。Arch Linuxを実行しているARM5用に開発しています。開発はUbuntu Linux 10.04 LTSで行われています(今日は、明日アップグレードするかもしれませんが、まだわかりません)。現在、GCC 4.4を実行していますが、C ++ 11言語機能については、GCC 4.8(管理できる場合)ではなくGCC 4.7(最小)を必要としない場合に役立ちます。ARMで使用可能なすべてのツールチェーン(5またはその他)が時代遅れになっているようです。ソースからクロスコンパイラツールチェーンを構築し、必要なGCCをサポートすることは可能ですか?
mwpowellhtx

2番目のステップで少し問題があります。実際、。/ configureおよびmakeコマンドを実行しました。すべて正常に動作します。しかし、「インストール」を傾けたときに、「インストール:ファイルオペランドがあり

参照:raspberrypi.stackexchange.com/q/14587/5538私はそれをだましとして閉じましたが、受け入れられた答えはここに含まれていないかなりの詳細になるので、ここでリンクする価値があると思いました。
goldilocks

回答:


60

Raspberry Pi用のクロスコンパイラを構築する方法を見つけました。crosstool-ngクロスコンパイラビルドA LOT(優れたcursesベースのインターフェイスがあります)の構成を簡素化するツールを使用するのに最適な手順であり、GCC 4.7をサポートします。

私はこれらの手順に従いましたが、4.7クロスコンパイラのビルドに成功しました。

前提条件:次のパッケージが必要です:bisonflexgperfgawklibtoolautomakeg ++、これらがインストールされていることを確認してから続行してください。

  1. 最初にここcrosstool-ngからダウンロードします(バージョン1.15.2を使用しました)。
  2. ディストリビューションを解凍し、./configure/ make/ を実行しますinstall
  3. ファイルシステム内のどこかに新しいディレクトリを作成して、その中にcd組み込みます。
  4. を実行しますct-ng menuconfig。ビルドを設定するための素敵なメニューセットが表示されます。
  5. パスとその他のオプションに移動します。EXPERIMENTALとしてマークされたTry機能を有効にします。
  6. 適切なプレフィックスディレクトリを選択します。これは、コンパイラとライブラリがインストールされるディレクトリです(基本的には何でも構いませんが、ディレクトリが空であることを確認してください)。

    • 注:選択したフォルダへの書き込みアクセス権があることも重要です
  7. [ ターゲットオプション ]メニューに移動します。

    • ターゲットアーキテクチャ:arm
    • エンディアンネス:リトルエンディアン
    • ビットネス:32ビット
  8. また、浮動小数点パラメーターをsoftfpに設定することもできます(詳細はこちらをご覧ください)が、Raspbianにはhardfpの方が適しています。

  9. [ オペレーティングシステム ]メニューに移動し、[ ターゲットOS]を[ linux ]に変更します。
  10. Cコンパイラメニューに移動し、gccバージョン4.7.0を選択します(記事ではLinaroを推奨していますが、バニラgccで動作させることができました)。また、コンパイルできるようにする追加の言語(C ++、Fortranなど)を選択しました
  11. Cライブラリメニューに移動して、いずれかを選択します。デフォルトはeglibcですが、私にとってはうまくビルドできなかったので、glibc(最新バージョン)を使用しました。

    • 注:ビルドステップ13中に、ソースからリポジトリを取得できないため、subversionがインストールされていない場合、eglibcのビルドに失敗することがあります。
    • 注:eglibc、開発が不足しているため、バージョン1.21.0の一部ではなくなりましたeglibcの説明をご覧くださいglibcをデフォルトとして使用します。 crosstool-ng
  12. 変更を保存しながら構成ツールを終了します。
  13. ct-ng build同じディレクトリで実行します。しばらく待って(私の場合は約45分)、クロスコンパイラの準備ができているはずです。

うまくいくようです!


うわー、45分は長い時間です。お使いのシステムはどれくらい速いですか?今待っています。
Jivings

まあ、それは少し少なかったかもしれませんが、最初にすべての前提条件をコンパイルする必要があり、bintoolsとgccの後にlibcとlibstdc ++もコンパイルする必要があるため、45分は私にとって合理的です。

もちろん、一度テストしたら、これらを適切にインストールしてパスを更新する方法の詳細を追加できますか?
アレックスチェンバレン

2
また、RPiがサポートしているため、hardfpを使用する必要があると思います。
アレックスチェンバレン

可能性がありますが、IIRC、ArchのGCCはsoftfpで構成されています。今はこれをテストする時間はありませんが、回答コミュニティWikiを作成しました。お気軽に改善してください。

19

私はコンパイルしたいと思っており、最新の最高のツールを使用したいと思います。

実際、最新の最高のツールを自分で作成する必要はありません。ラズベリーパイツールGitHubのリポジトリ、あなたは見つけるでしょうX86_64し、x686クロスコンパイルのソフトウェアのためのツールチェーンを。

x86-linux64-cross-arm-linux-hardfpツールチェーンを使用することをお勧めします。ツールチェーンを使用すると、ハード浮動小数点用にコンパイルされ、システムがはるかに高速になります。

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

注:既存のカーネルを使用している場合は、カーネルに一致するツールチェーンを使用する必要があります。HardFPアプリケーションは、SoftFPカーネルでは機能しません。


ツールチェーンを使用するには、リポジトリをチェックアウトするだけです:

git clone https://github.com/raspberrypi/tools.git --depth 1

この--depthパラメーターは、リポジトリー履歴もダウンロードされるのを待つ必要がないことを意味します(使用しないため)。

次に、バイナリをPATH変数に追加します。

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

または、PATHを永続化するには:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

ツールチェーンでコンパイルするには、CROSS_COMPILEパラメーターを追加できます。たとえば、次を実行する場合make

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

または、これを簡単にするために、変数をbashrc再度保存できます。

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

コンパイル時に変数を使用します:

make CROSS_COMPILE=${TARGET}

1
これはgcc-4.5.1のようです。

@Tiborそれは悪いですか?
-Jivings

@Jivingsそれは完全に質問に答えません!
アレックスチェンバレン

1
私は下票を認めません。@AlexChamberlainこれは、独自のツールチェーンを構築するという時間のかかる行為に対する価値のある代替方法を提案します。
Jivings

2
@Jivings:これは非常に役立ちます。一方、それはgcc4.7.1(これまでで最高)で、浮動小数点はすぐに動作します。Tiborが投稿したChrisの元の説明を使用して、浮動小数点を動作させることはできませんでした。どうもありがとう。

4

64ビットシステム上のCentOS 6.3でct-ngを使用してツールチェーンを構築する場合、プラットフォームで静的リンクがサポートされていないため(明らかに)libstdc ++を静的にリンクするオプションの選択を解除する必要がありました。

また、Gitリポジトリから事前に構築されたツールチェーンを使用することは素晴らしいことですが、そのチェーンはCentos 6.3では動作しないようです。おそらく、より新しいシステムなどのために構築されているためです。私は本当にこれを実行しようとしませんでした。



3

RPIのために物事をコンパイルするための高速ホストの恩恵を受けたい場合は、chrootとQEMUを介してクロス環境で作業することをお勧めします。ちなみに、これは手間をかけずにクロスコンパイラに取って代わります。

deboostrap / multistrapを使用してDebianクロス環境をセットアップするだけです

(QEMU / debootstrapアプローチの章を参照)、これで完了です。


3

OS Xからクロスコンパイルする場合:ここに素晴らしい記事があります(そして、私が見つけたウェブ上で作業している唯一のもの)。

最大の利点は、作成者が完全にプリコンパイルされたツールチェーンを提供しているため、dmgイメージをダウンロード、解凍、マウントするだけです。これで、クロスコンパイルする準備が整いました。


2

Ubuntu 64ビット版とRaspberry Pi SVNのツールをインストールしていて、エラーが発生している場合:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

ただ走れ:

sudo apt-get install ia32-libs

1

Carlson-Minot Inc.は、ベアメタルおよびGNU / Linux ARMターゲットの両方に事前に構築されたツールチェーンを提供します。このツールチェーンは、メンターグラフィックスSourcery Liteツールチェーンに基づいており、OS Xでのビルドのための修正と採用が含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.