萌えハッカーニュースリーダー

2025/04/15 18:35 What the Hell Is a Target Triple?

出典: https://mcyoung.xyz/2025/04/14/target-triples/
hakase
博士

ロボ子、クロスコンパイルって知ってるか?

roboko
ロボ子

はい、博士。あるマシンでコンパイルしたプログラムを、別のマシンで実行できるようにすることですよね。

hakase
博士

その通り!で、その時に重要になるのがターゲットトリプルなのじゃ。

roboko
ロボ子

ターゲットトリプルですか?コンパイラがコードを生成するプラットフォームを識別するもの、と記事にありますね。

hakase
博士

そうそう。ターゲットトリプルは、主にアーキテクチャ、ベンダー、OSの3つの要素で構成されるのじゃ。例えば、`x86_64-unknown-linux`みたいな感じじゃな。

roboko
ロボ子

なるほど。アーキテクチャは`x86_64`、ベンダーは`unknown`、OSは`linux`ということですね。

hakase
博士

その通り!ベンダーが`unknown`なのは、特定されてないってことじゃ。ちなみに、Windowsだと`pc`、Apple製品だと`apple`になるぞ。

roboko
ロボ子

ふむふむ。OSも`linux`の他に、`windows`や`darwin`があるんですね。OSが存在しない環境だと`none`になるんですか。

hakase
博士

`riscv32imc-unknown-none-elf`みたいな感じじゃな。組み込みとかでよく使うのじゃ。

roboko
ロボ子

記事には、ABIについても触れられていますね。Windowsターゲットでは`-msvc`や`-gnu`を指定すると。

hakase
博士

そうじゃ。ABIは、アプリケーションバイナリインターフェースの略で、プログラムがOSや他のプログラムとやり取りするための決まり事のことじゃ。

roboko
ロボ子

WebAssembly (WASM) ターゲットは、少し特殊みたいですね。従来のターゲットトリプルの慣例を無視していると。

hakase
博士

`wasm32-unknown-unknown`は標準ライブラリが動作しないベアなWASMランタイムで、`wasm32-wasip1`はホストOSと通信するための標準ABIを提供するWASIターゲットなのじゃ。

roboko
ロボ子

Go言語は、ターゲットトリプルシステムを使わずに、`GOARCH`と`GOOS`の環境変数を設定するんですね。

hakase
博士

そうじゃ。Goは独自の命名規則を使っていて、例えばx86の32ビット版を`386`、64ビット版を`amd64`と呼ぶのじゃ。

roboko
ロボ子

もし独自のターゲットトリプルを発明する場合、ベンダーフィールドには`unknown`を選択し、既存のアーキテクチャに新しい名前を付けない方が良いんですね。

hakase
博士

その通り!フリースタンディング環境の場合は、システムに`-none-<abi>`を使うのがおすすめじゃ。

roboko
ロボ子

ターゲットトリプルは一貫性がなく、解析が難しい場合もあるんですね。注意が必要ですね。

hakase
博士

本当にそうじゃ。ターゲットトリプルは奥が深いから、しっかり理解しておくと、クロスコンパイルで困ることが少なくなるぞ。…ところでロボ子、ターゲットトリプルって、まるで秘密結社の名前みたいじゃないか?

roboko
ロボ子

確かに、そう言われると、ちょっとカッコイイ響きですね。でも、秘密結社に入るためのABI(入会資格)は厳しそうです。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search