クロスコンパイラを使用して何かをコンパイルするにはどうすればよいですか?

クロスコンパイラを使用して何かをコンパイルするにはどうすればよいですか?

クロスコンパイルについて学び、それを作成する方法について多くの情報を見つけましたが、使用方法に関する情報はほとんどありませんでした。

bluez-utils-3.36ツールをコンパイルしたいと思います。このウェブサイト私自身のコンパイラを使用してください。クロスコンパイラ(arm-linux-gcc-4.4.3.tgz)が見つかりました。このウェブサイト。私のgccバージョンは4.4.3なので、これが正しいバージョンであるとします。

ホスト(コードを作成するマシン)

Processor: Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz
OS Version: Linux 2.6.32-44 generic

ターゲットマシン:(コンパイルされたファイルを実行する必要があるターゲット)

Processor: ARM926EJ-S rev 5 (v5l)
OS Version: Linux 2.6.35.3-571

この新しいコンパイラでどのようにコンパイルしますかbluez-utils-3.36

答え1

コンパイラとツールチェーンの他の部分には、GNU標準の命名スキームがあります。

<target triplet>-<tool name>

これ目標三重項これは形です

<machine>-<vendor>-<operatingsystem>

ツール名はコンパイラの名前、またはその他gccのツール名です。ldstripar

デフォルトのコンパイラ、つまりクロスコンパイラではなくネイティブバイナリをコンパイルするコンパイラは、gccトリプルなしで呼び出されます。

あなたの質問で言及したファイル内のコンパイラのトリプルは次のとおりですarm-none-linux-gnueabi(クワッドのように見えますが、それはまさにそれです)。したがって、これを使用するには、arm-none-linux-gnueabi-gccNormalの代わりに呼び出すだけですgcc

を使用して何かをビルドする場合は、通常、通常のMakefileコンパイラの代わりに実行してMakefile必要なコンパイラを使用できます。 GNUスクリプトを使用して何かを構築する場合は、CC=arm-none-linux-gnueabi-gcc makemakeconfigureターゲット三重項を指定することもできます。

答え2

クロスコンパイラ以上が必要です。ツールチェーンこれは、ソースコードから実行可能ファイルをインポートするためのより多くの手順が必要なためです。これらのステップは

  1. コンパイル(ソースコードをアセンブラに)
  2. 組立(組立コードから機械コードへ)
  3. リンク(機械語コードのルーチンとライブラリが互いにリンクされている)

GNUツールチェーンの命名標準は、<target>-<tool>例えばarm-oe-linux-gnueabi-gccARMアーキテクチャ用コンパイラ、Open Embedded Linuxバリアントarm-oe-linux-gnueabi-as、同じツールチェーンのアセンブラなどです。

ただし、これはホストのソースコードからターゲットコンピュータの実行可能ファイルを取得するために必要なすべてではなく、ホストのターゲットコンピュータからヘッダーとライブラリをインポートするにはリンカも必要です。そのため、「記号を読み取れませんでした。無効なファイル形式」というビルドエラーが発生します。もちろん、ヘッダーとsysrootとすべてのエントリをホストにコピーしたら、ホストの元の変数ではなく正しい変数を見つけるために、クロスコンパイラの適切な変数を設定する必要があります。

通常、ソースコードパッケージには、特定のコンパイラに対応するために用意されたMakefileが含まれています。以前のコメントを見ると、CC =変数を使用して多くの問題を解決したようです。すべてが設定されたら、MakefileのCCを変更してmake

したがって、簡単に言えば、ターゲットコンピュータのホストコンピュータに独自のツールチェーンを構築するか、すでに構築されているツールチェーンをインポートする必要があります。

頑張って楽しく過ごせます!

答え3

ホストはクロスコンパイルするシステムです。あなたの開発マシン。
ターゲットはARM926EJ-Sシステムです。
いくつかの注意:
ARM926EJ-SはARMv5です。クロスツールチェーンが正しいARMプロセッサバージョンに合わせてコンパイルされていることを確認してください。
makeファイルに要求されたインストールディレクトリ:
INSTALL = /usr/bin/install -c
これが望ましくないホスト(開発)システムにインストールされると思います。
組み込みデバイス用にクロスコンパイルする場合は、bluezをインストールするために "workingInstall"ディレクトリを作成する必要があります。次に、組み込みファイルシステムに追加します。 (NAND、SDカード)。

関連情報