10.2 Cコンパイラ(gcc : GNU C compiler)

  1.コンパイラの扱う各種ファイルの概要
 CとC++のコンパイラは統合されています。どちらの場合も、入力ファイルは、プリプロセス、コンパイル、アセンブル、リンクの4つの処理ステージのうちの1つ以上のステージを踏んで処理されます。gccを起動すれば、これらの必要な過程が自動的に実行されます。gccというのは、実は「ドライバ」と呼ばれるプログラムであり、gcc自身はコンパイルなどの実作業を何も行なわず、gccの内部から、実際にコンパイル・アセンブル・リンクなどを行なうコマンドを呼び出すことによって、一連のコンパイル動作を行なっているのです。

 コンパイラは、ソースファイル名の拡張子によってソースの言語を識別しますが、デフォルトの動作は、どちらの名前でコンパイラを使うかに依存しています。
gcc
プリプロセス済みの (.i) ファイルを C のファイルと仮定し、C スタイルのリンクを行います。

g++
プリプロセス済みの(.i) ファイルを C++ のファイルと仮定し、C++ スタイルのリンクを行います。
ソースファイル名の拡張子は、その言語が何であるかと、どのような処理が行われるべきかを示します。
.h
プリプロセッサファイルです。通常はコマンドライン には現れません。

.c
C言語ソースです。プリプロセッサ、コンパイラ、アセンブラにかけられます。

.C
C++言語ソースです。プリプロセッサ、コンパイラ、アセンブラにかけられます。

.cc
C++言語ソースです。プリプロセッサ、コンパイラ、アセンブラにかけられます。

.cxx
C++言語ソースです。プリプロセッサ、コンパイラ、アセンブラにかけられます。

.m
Objective-C言語ソースです。プリプロセッサ、コンパイラ、アセンブラにかけられます。

.i
プリプロセッサにかけられたC言語ソースです。コンパイラ、アセンブラにかけられます。

.ii
プリプロセッサにかけられたC++言語ソースです。コンパイラ、アセンブラにかけられます。

.s
アセンブリ言語ソースです。アセンブラにかけられます。

.S
アセンブリ言語ソースです。プリプロセッサ、アセンブラにかけられます。

??
その他の(解釈されない)拡張子を持つファイルはリンカに渡されます。
 以下のファイルも同様です。
.o
オブジェクトファイルです。

.a
アーカイブファイルです。
 リンクは、オプション -c, -S, -E を指定して抑制しないかぎり(もしくはコンパイルエラーによってすべての処理が中断しないかぎり)、常に最終ステージで実行されます。リンクのステージにおいては、ソースファイルに対応した全ての .o ファイルと、-l で指定したライブラリと、理解できなかったファイル名(名前に .o のついたオブジェクトファイルや .a のついたアーカイブを含む) は、コマンドラインに並べられた順番でリンカに渡されます。