GCCについて

 現在の最新バージョンとして,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).

〔図3〕Benchmarking GCC
http://gcc.gnu.org/benchmarks/


 なお,WindowsでGNUツールを動作させる環境としてCygwinがあります(図4)が,これに関しても言及する予定です.

〔図4〕CygwinのWebページ
http://cygwin.com/

● 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用オプション
・コード生成オプション

記事内インデックス    連載インデックスはこちら   Interfaceのトップ
GCCについて
GCCを手動で最適化してみる
最適化とは
最適化のオプション
オプション実行のカスタマイズ

Copyright 2002 岸 哲夫

Copyright 1997-2017 CQ Publishing Co.,Ltd.