I-8-2. コンパイラの仕組みと実行ファイルの作成

C言語プログラムを題材として、コンパイラの仕組み、プリプロセッサ、コンパイラ、リンカの役割を解説する。またソースプログラムからオブジェクトファイルを生成し、実行プログラムを構築するまでの手順やコンパイラオプションの指定などを説明する。

【学習の要点】

* コンパイラとは、実行可能なオブジェクトコードを作成するツールである。

* 実際のコード変換処理の前に、プリプロセッサといったツールが実行される。

* コードの変換後には、リンカといったツールが実行されて実行ファイルが完成する。

図I-8-2. プログラム構築までの手順

【解説】

1) コンパイル時に使用するソフトウェア開発ツール

コンパイラは様々なツールを組み合わせて実行可能なコードを作成する。OSSのGNU gccコンパイラを使用した場合は、以下に示す機能をまとめて実行することができる。

* プリプロセッサ

オブジェクトコードに変換するその前に、ソースコードに一定の規則に従って処理を加えるツール。

* コンパイラ

コンピュータ上で実行可能なオブジェクトコードに変換するツール。コンパイラには最適化を行うか行わないかなど、コンパイラの処理方法を制御するオプションがある。

* リンカ

オブジェクトコードに、必要なライブラリなどを結合させて、実際に実行することが可能なファイルを生成するツール。

2) コンパイラの仕組み

人間がプログラミング言語の記述ルールに従って作成したソースコードを、コンピュータ上で実行可能なオブジェクトコードに変換することをコンパイルといい、そのためのソフトウェアをコンパイラという。コンパイラの仕組みは以下の通り。

* 字句解析

ソースコードに含まれる文字列を、字句という単位に分割する。

* 構文解析

文法的に正しいか、構文的に間違っていないかのチェックを行う。

* 意味解析

実行することが可能かどうかをチェックする。

* コード最適化

実行時により速く実行できるように無駄をなくす処理を行う。

* コード生成

オブジェクトコードの生成を行う。

3) 実行プログラム構築までの手順

GNU gccコンパイラを使用して、C言語のソースコードから実行プログラムを構築する流れを以下に明記する。

* viやemacsなどを使ってソースコードを作成する。

* gccコマンドを使って、コンパイルを行う。内部的な処理の流れは以下の通り。

- プリプロセッサが実行されて、#include文で指定されたヘッダーファイルが取り込まれる。

- プリプロセッサの実行結果に対して、字句解析と構文解析が行われる。

- 続いて、意味解析・最適化が行われて、アセンブリ言語のコードを作成する。

- アセンブラが実行可能形式のコードへ変換する。

- リンカが、スタートアップルーチンやライブラリを付加させて実行モジュールを作成する。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン