web-dev-qa-db-ja.com

クロスコンパイラを使用する場合のconfigureのホスト値を決定する方法

一般的な質問:クロスコンパイラを使用する場合、configureを実行するときに指定する必要がある「--Host」オプションの値をどのように判断できますか?

具体的:arm64Archにクロスコンパイラを使用しています。使用する正しい「--Host」値は何ですか?

13
Omer Dagan

クロスコンパイラを使用している場合、--Hostを実行するときに指定する必要がある./configureオプションの値をどのように判断できますか?

ツールチェーンの作成について説明するときは、3つのマシンを区別する必要があります

  • ビルドマシン、ツールチェーンがビルドされます。
  • ホストマシン、ツールチェーンが実行されます。
  • ターゲットマシン、ツールチェーンによって作成されたバイナリが実行されます。

ツールチェーンには、次の4つの一般的なビルドタイプがあります。

  • ネイティブビルドつまりBUILD==Host==TARGET
    ワークステーション用の通常のgccをビルドするために使用されます。例えばBUILD==Host==TARGET==x86

  • クロスビルドつまりBUILD==Host!=TARGET
    ワークステーションで機能するが、ターゲットのバイナリを生成するツールチェーンを構築するために使用されます。例えばBUILD==Host==x86 TARGET==arm

  • クロスネイティブビルドつまりBUILD!=Host==TARGET
    ターゲットで動作し、ターゲットのバイナリを生成するツールチェーンに使用されます。例:BUILD==x86 Host==TARGET==ARM

  • カナダのツールチェーンつまりBUILD!=Host!=TARGET
    アーキテクチャAの構築に使用ツールチェーンはBで実行され、アーキテクチャCのバイナリを生成します。例:BUILD==x86 Host==mac TARGET==arm

武装して、この基本があなたの質問に来ます。

どのソフトウェアでも、最初に./configure --helpを実行します

ホストタイプ:

--build=BUILD           configure for building on BUILD [BUILD=Host]
--Host=HOST             configure for Host [guessed]
--target=TARGET         configure for TARGET [TARGET=Host]

上記にあるので、やりたいことに応じて、クロスコンパイル用に設定する必要があります。すべてのオプションが利用可能な場合は、アームターゲットで実行し、--Host={your toolchain triplet} --target={your toolchain triplet}を設定します。

たとえば、arm-none-linux-gnueabi-gccを使用している場合は、--Host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabiを設定します。これにより、メイクファイルに書き込まれます。最後に、生成された実行可能ファイルはターゲット上で実行されます。 --buildの場合、これは自動的に設定されます。心配する必要はありません。

一部のソフトウェアパッケージでは、2つのオプションのみが利用可能ですi.e Host and build。ここで、set Hostがクロスコンパイルするのに十分である場合

特定:arm64Archにクロスコンパイラを使用しています。使用する正しい--Host値は何ですか?

X86_64の場合、通常は--Host={triplet}が指定されるため、ツールチェーンに--Host={triplet}を設定することで、arm64でも同じことが機能すると思いますが、よくわかりません。

37
vinay hunachyal

--Hostに何を入力するかを見つける最も簡単な方法は、ホストマシンでconfig.guessを実行することです。私のマシンでは/usr/share/automake-1.15/にありましたが、locate config.guessを実行して見つけることをお勧めします。

スクリプトはオープンソース(GPL)であり、マシンで利用できない場合に備えて、次のアドレスで利用できます。

https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess

私のターゲットマシンでは、tegra X1(これもaarch64)の答えはaarch64-unknown-linux-gnuでした。これは、クロスコンパイルには問題なく機能するようです。

10
Drugbird

-ホストは、結果のビルドが最終的に実行されるマシンの「トリプレット」です。あなたの場合、「arm64」はアーキテクチャですが、これはトリプレットの1つにすぎません。いずれにせよ、それはトリプレットの文字列「aarch64」にマップされます。考えられる値の1つは

--Host = aarch64-linux-Android

this gnu.orgのページ --Host/-target/-buildの使用法に関する決定的な答えを示します

2
sorenoid