現在の最新バージョンとして,2002年2月に3.0.4が公開されました.以降,とくに断りがない場合,GCCはFSF版のGCCを指します.なお,GCCはC言語だけのコンパイラではありません.最初はGCCはGNU C Compilerの略でしたが,今ではC,C++,Objective C,Fortranなどで書かれたプログラムをコンパイルすることが可能です.そのため,GCCはGNU Compiler Collectionの略ということになっています.
しかし,手始めとして,今回はC言語に関して解説します.
ところで,GCCの機能を有するものはFSFのGCCだけではありません.
まず,EGCS(Experimental/Enhanced GNU Compiler System)というツールがあります.これはgcc-2.8.xをベースとして,数値演算関係の最適化能力を中心に,さまざまな改良を施したコンパイラです.GCCのb版としてCygnusが運営するEGCS Steering Committeによって開発・改良が行われていました.1999年4月27日にFSFは,Cコンパイラ『egcs』を開発しているEGCS運営委員会(EGCS Steering Committee)が,GNUのメンテナとしてGCCの開発を引き継ぐことを発表しました.これにより,EGCS運営委員会はGCC運営委員会(GCC Steering Committee)と名称を変え,今後のGCCのリリースに責任を負うことになりました.
また,PGCC(Pentium GCC)は,GCCをベースとしてPentiumプロセッサやその互換チップに重点を置いたものです.pgcc-1.1.3ではMMXオプションが追加されました.
ちなみにLinuxの配布パッケージの一つである「Stampede GNU/Linux」はそのすべてがPGCCでコンパイルされています.Stampedeによると「一般の配布パッケージと比較して20%〜30%ほどパフォーマンスが上がっている」とのことです.
そして,AGCC(Athlon GCC)は,PGCCをベースとしてAthlonプロセッサをターゲットに最適化を施したコンパイラです.同時にPGCCのバグフィックスも行われているので,Athlonユーザーでなくても使う価値はあるでしょう.
EGCSやPGCC,AGCCは,FSFが直接関わっているものではありません.前述の「フリーウェア」の考え方により別のプロジェクトとして作られています.PGCC,AGCCに関しては後述します.
それぞれのコンパイラに関しての速度などは,Benchmarking GCCというWebサイトが参考になります(図3).
なお,WindowsでGNUツールを動作させる環境としてCygwinがあります(図4)が,これに関しても言及する予定です.
● GCCのバージョン
本稿で取り扱うGCCのバージョンは2.95.3とします.これは,一般的なディストリビュータが使用しているものが2.95.3なので,ほかのバージョンでは一般的な比較ができない恐れがあるのと,最新版には必ずバグがあるであろうという危惧からです.
興味のある読者は最新版の3.0.4をインストールしてみるのも良いでしょう.
参考までに3.0.4にバージョンアップする手順を簡単に示します.
1)binutilsを最新版にする
アセンブラやローダが含まれるパッケージであるbinutilsを最新版に更新します.ディストリビューションによってはRPMパッケージで更新できるので,探してみてください.
2)リングサーバ(http://www.ring.gr.jp/)などからgcc-3.0.4.tar.bz2をダウンロードし,以下のようにする.
cd /usr/local/src
tar xvzf hoge/gcc-3.0.4.tar.bz2
mkdir gccobj
cd gccobj
../gcc-3.0.4/configure --enable-languages=c++,f77
make bootstrap
make install
これで/usr/local以下にインストールされます.gcc -vと打鍵してバージョンを確認してください.
● gccの起動オプション
gccの起動オプションはたくさんあります.今回は最適化オプションについて詳しく解説しますが,その他の指定可能なオプションを以下に記します.最適化以外のオプションの解説は,次回以降に行う予定です.
・GNUコンパイラすべてに関して出力の種類の制御を行うオプション
・C言語の方言を扱うオプション
・C++言語の方言を扱うオプション
・警告を要求/抑止するオプション
・デバッグのためのオプション
・最適化オプション
・プリプロセッサオプション
・アセンブラのオプション
・リンク時のオプション
・ディレクトリ検索用オプション
・ターゲットオプション
・機種依存のオプション
M680x0用オプション
VAX用オプション
SPARC用オプション
Convex用オプション
AMD29K用オプション
ARM用オプション
Thumb用オプション
MN10200用オプション
MN10300用オプション
M32R/D用オプション
M88K用オプション
RS/6000とPowerPC用オプション
RT用オプション
MIPS用オプション
i386用オプション
HPPA用オプション
Intel960用オプション
DEC Alpha用オプション
Clipper用オプション
H8/300用オプション
SH用オプション
System V用オプション
ARC用オプション
TMS320C3x/C4x用オプション
V850用オプション
NS32K用オプション
・コード生成オプション
|