最終更新日:2026年8月27日
fe fe-technology programming
まず結論
クロスコンパイラとは、コンパイラを動かしているコンピュータとは異なるCPUや実行環境向けの目的プログラムを生成するコンパイラです。
基本情報技術者試験では、次の判断基準が重要です。
開発する環境 と 実行する環境 が違う
↓
別の環境向けの実行プログラムを作る
↓
クロスコンパイラ
たとえば、PC上でソースコードをコンパイルして、マイコン向けの実行プログラムを生成する場合です。
試験中は、「別環境を動かす」のではなく「別環境向けに作る」という点を押さえると、エミュレータとの混同を防げます。
直感的な説明
クロスコンパイラは、別の国で使う説明書を、自分の国にいながら作るようなイメージです。
たとえば、開発用PCと組込み機器があるとします。
開発用PC
↓ ソースコードをコンパイル
クロスコンパイラ
↓
組込みCPU向けの実行プログラム
↓
組込み機器で実行
開発用PC自身で動くプログラムを作っているわけではありません。
実際に動かしたい相手のCPUや環境に合わせたプログラムを、別のコンピュータ上で作るのがクロスコンパイルです。
定義・仕組み
通常のコンパイラは、ソースプログラムを目的プログラムへ変換します。
クロスコンパイラも基本的な役割は同じですが、コンパイラを実行する環境(ホスト)と、生成したプログラムを実行する環境(ターゲット)が異なる点が特徴です。
| 用語 | 意味 |
|---|---|
| ホスト環境 | クロスコンパイラを動かす開発側の環境 |
| ターゲット環境 | 生成された目的プログラムを実行する環境 |
たとえば、次のような構成です。
ホスト:Windows PC / x86-64
↓
クロスコンパイラ
↓
ターゲット:ARMマイコン
この場合、Windows PC上でコンパイルしますが、生成物はARMマイコン向けです。
なぜクロスコンパイラを使うのか
組込み機器やマイコンは、開発用PCほど豊富な資源を持っていないことがあります。
- メモリが少ない
- ストレージが小さい
- 画面やキーボードがない
- 開発ツールを動かしにくい
そのため、開発しやすいPCでプログラムを作り、ターゲット機器向けに変換してから転送する方法が使われます。
PCで編集
↓
PCでクロスコンパイル
↓
実行ファイルをターゲットへ転送
↓
ターゲットで実行
このテーマは、基本情報技術者試験の「ソフトウェア」「言語プロセッサ」「組込みシステム」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、複数の言語処理プログラムの説明からクロスコンパイラを選ばせる問題として出題されます。
まず、問題文に次の要素があるかを確認します。
- あるコンピュータ上で動作する
- 別のCPUやコンピュータ向けである
- 実行プログラムや目的プログラムを生成する
この3点がそろえば、クロスコンパイラを疑います。
選択肢を切る判断表
| 説明 | 考える用語 |
|---|---|
| 別の環境向けの実行プログラムを生成する | クロスコンパイラ |
| 別のコンピュータ環境の動作を模擬する | エミュレータ |
| 生成する目的プログラムの実行効率を高める | 最適化コンパイラ |
| 条件やパラメータからプログラムを自動生成する | ジェネレータ |
| ソースコードを逐次解釈しながら実行する | インタプリタ |
特に重要なのは、作るのか、動かすのかです。
別環境向けのプログラムを作る
→ クロスコンパイラ
別環境そのものをまねて動かす
→ エミュレータ
言語プロセッサ全体の違いを一度まとめて整理したい場合は、言語プロセッサの比較も合わせて読むと、コンパイラ・インタプリタ・ジェネレータ・エミュレータの役割がつながります。
どんな場面で使う?
クロスコンパイラは、特に組込みシステムの開発で使われます。
例えば、次のような機器です。
- マイコン制御機器
- 家電製品
- 車載ECU
- 産業用制御装置
- IoT機器
開発者はPC上でコードを書き、ターゲットCPU向けにクロスコンパイルします。
ソースコード
↓
開発用PC上のクロスコンパイラ
↓
ターゲットCPU向けバイナリ
↓
実機へ書き込み
ここで、実機がまだ用意できない場合などは、エミュレータやシミュレータを併用することもあります。
ただし役割は別です。
- クロスコンパイラ:ターゲット向けのプログラムを作る
- エミュレータ:ターゲット環境の動作をまねる
よくある誤解・混同
クロスコンパイラとエミュレータを同じだと思う
違います。
クロスコンパイラは、別環境向けの目的プログラムを生成します。
エミュレータは、別のコンピュータやCPUの動作をソフトウェアなどで模擬します。
生成する → クロスコンパイラ
模擬する → エミュレータ
クロスコンパイラは「高性能なコンパイラ」という意味
違います。
cross は、開発環境とターゲット環境をまたぐことを表しています。
実行速度を高めることが中心なら、コンパイラ最適化の話です。
最適化との違いをもう少し詳しく確認したい場合は、コンパイラ最適化の記事を読むと、「どこで動かすか」と「生成コードをどう効率化するか」の違いが整理できます。
ジェネレータもプログラムを作るので同じ
ジェネレータは、条件やパラメータなどを指定してプログラムを自動生成する仕組みです。
一方、クロスコンパイラには元となるソースコードがあり、それを別のターゲット環境向けにコンパイルします。
ソースコード → 別環境向け目的プログラム
→ クロスコンパイラ
条件・パラメータ → プログラム生成
→ ジェネレータ
クロスコンパイルしたプログラムは開発用PCでもそのまま動く
必ずしも動きません。
ターゲットCPUの命令形式やOSなどに合わせて生成されているため、開発用PCとは命令セットや実行環境が異なる場合があります。
試験では、生成した場所ではなく、どの環境向けに生成したかを見るのがポイントです。
まとめ(試験直前用)
- クロスコンパイラは、別のCPU・実行環境向けの目的プログラムを生成する
- 開発側をホスト、実行側をターゲットとして考える
- 作る → クロスコンパイラ、まねて動かす → エミュレータ
- 実行効率を高める話なら、コンパイラ最適化
- 条件から自動生成する話なら、ジェネレータ
- 「開発環境と実行環境が違う」が最大の判断ポイント