2017-10-30 32 views
-1

多くの競合情報がありますが、いくつかの説明が必要です。 ビルドホストターゲットクロスコンパイルの用語---ビルド、ホスト、ターゲット

ビルドが知っている3人のシステム名があります:あなたが構築しているマシン(ビルド)、あなたは(ホスト)のために構築しているマシンは、とGCCがコードを生成するマシン(ターゲット)。 GCCを設定するときは、--build =、--host =、--target =で指定します。

実は、私は上記の定義におけるホストターゲットの間にどのような違いを理解していません。

いくつかの他のページは

「ホスト」は、あなたがコードをコンパイルするために使用しているマシン(またはアーキテクチャ、またはプラットフォーム)であると言います。 'target'は、コードを実行するマシン(またはアーキテクチャ、またはプラットフォーム)です。

これは私には理にかなっているが、この説明では、ホストは常にビルドと同じです??私はかなり混乱しています。

私の場合、 コンパイラ(GCC)がx86_64マシン上で実行され、バイナリ実行ファイルがARM上で実行されるように設定しています。プログラムはCで書かれているので、コンパイラはGCCです。

./configure --build=x86_64 --host=x86_64 --target=arm-linux-gnueabihf 
    make 
    make install 

ビルド、ホストはx86_64版とターゲットの両方がアームであるように聞こえます。あれは正しいですか?

私はJenkinsマシン(x86_64)で動作する独自の組み込みプログラムをコンパイルしています。組み込みプログラムはARMベースのマシン上で動作します。

+0

どのような正確なプログラムをコンパイルしていますか?いくつかのクロスコンパイラ版の[GCC](http://gcc.gnu.org/)、あるいは既に入手可能な 'gcc'バイナリを持つ独自のプログラムですか?いくつかのソースをあなたの質問に表示して、あなたが使っている正確なコンパイルコマンドを表示してください(そして実行中のコンピュータについて説明してください)。あなたのシステムについて教えてください(ホスト、ビルドマシン、ターゲットマシンとは何ですか?)。 **あなたの質問を**編集してください。現在は混乱しています。 –

+0

編集しても、あなたの質問は不明です。「コンパイラのように設定しています」とはどういう意味ですか?*設定されているものは何ですか?* **あなたの質問をさらに**改善してください**。 *正確なコマンドを入力する*。実行しているコンピュータについて説明します。 **どのコンパイラを使用しますか?** *と* **どのように使用しますか?** –

+0

明らかに、英語は母国語ではありません(どちらも私にとってはフランス語です)。あなたの言葉遣いを改善し(たぶんいくつかの辞書の助けを借りて)、あなたが使っている*正確なコマンド*を与えてください。 IMHO「コンパイラがx86_64マシン上で実行され、バイナリ実行可能ファイルがARM上で実行されるように設定しています」という文章は意味をなさない(あなたが何をどのように構成しているかを伝えていない)。英語はあなたには簡単ではないことを考えると、あなたの質問にはより多くの情報と冗長性を追加する必要があります。 –

答えて

1

私はPowerPCマシンで、x86マシン上でARMを実行するバイナリを作る(実行する)コンパイラを作っていると言います。

これは、PPCをビルドし、x86をホストにし、ターゲットをARMにします。 Basileがコメントしたように、これはカナダの十字架です。

ビルドとホストが異なるのはあまり一般的ではありませんが、確かに起こります。時には、ビルドとホストは同じアーキテクチャでもありますが、これを引き起こす環境については異なるものがあります。私のx86上でカスタムツールチェインを作ることは、ビルドとホストがx86であることを意味しますが、ホストはビルドよりも異なるライブラリや依存関係を持つことがあります。これは、例えば、組み込み開発用のサンドボックスツールチェーンをビルドサーバー上で構築する場合です。

+1

この状況をCanadian-crossコンパイラといいます。どうしてか分かりません。 –

+0

@BasileStarynkevitch私はさらに混乱しています。 私はコンパイラを作っていません。私はMakefileを使ってARM上で実行されるバイナリを生成しています。 makefileはx86_64マシン上で動作しますが、バイナリ実行ファイルはARMマシン上で実行する必要があります。 – sh0731

+0

@SteveHe:GCCを設定しているので、コンパイラをビルドしています( 'gcc'のバイナリ)。それ以外の場合、あなたの質問は意味をなさない。 –

関連する問題