クロスコンパイラ
カナディアンクロス (Canadian Cross) とは、他のマシンで動作するクロスコンパイラを作成する技法である。三種類のマシンA、B、C があるとき、Bで動作してC向けの実行ファイルを生成するクロスコンパイラをA上で作ることをいう。GCCのコンフィグではAをbuild、Bをhost、Cをtargetと言う。buildについては明示的に指定しなくても普通はスクリプトで情報を収集できるが、hostとtargetは当然ながら指定しなければならない。
GCCでカナディアンクロスを行う場合、4つのコンパイラが関わってくる。
マシンAのネイティブのプロプライエタリなコンパイラ。これを使って次のコンパイラを構築する。
マシンAのGCCネイティブコンパイラ。これを使って次のコンパイラを構築する。
マシンA上でマシンBのコードを生成するGCCクロスコンパイラ。これを使って次のコンパイラを構築する。
マシンB上でマシンCのコードを生成するGCCクロスコンパイラ。
最後のクロスコンパイラはビルドを行っているマシンA上では動作できないが、マシンB上でそれを使えば、マシンC上で動作する実行ファイルを生成できる。
例えば、NetBSDにはPOSIXシェルスクリプト build.sh があり、これを使ってホストコンパイラで自前のツールチェーンを構築でき、さらにそこからクロスコンパイラを構築していくことができる。
このようなクロスコンパイラはそれ以前からもあったが、「カナディアンクロス」という呼称はGCCの開発において命名されたもので、当時のカナダに3つの大きな政党があったことに由来する。