序章

GCC とは何か？
GCC（GNU Compiler Collection）のことを説明する

ツールは一般的に GNU ツールと呼ばれています．もにあたって，Linux のことも簡単に説明しておいたほ

ちろん，この著作権も GPL によって保護されていまうが話は早いでしょう．

す．このように GNU と Linux は不可分のものであり，本書を読む皆さんの多くは Linux システムをお使いだと思います．そのカーネルは 1991 年に Linus

本来は GNU/Linux システムと呼ばれてしかるべきものです．

Torvalds 氏によって公開されました．そしてその著

Linus Torvalds 氏は規定によって公開されている

作権は「GNU ライブラリ一般公有使用許諾」（ GNU

GNU ツールのソース・コードを kernel に組み込み，GPL ： GNU General Public Lisence）によって保護さ現在の Linux システムが完成したのです．

れています．

● GNU プロジェクトについて

皆さんは Linux システムでどのようなことを行いますか．インターネット接続やプログラム開発，あるいはサーバとして使用したり，いろいろなアプリケーションを動作させると思います．
Linux Kernel だけでは何もできません．コンパイ

GNU プロジェクトは，1984 年に Richard M. Stallman
氏を中心として作られました．
GNU とは「GNU is Not Unix」の頭文字を取った略号であり，UNIX と上位互換性のあるフリーな総合ソフトウェア・システムの名称です（図 1）．

ラや圧縮ツール，メール配送，そのほかのいろいろなkernel も本来は GNU プロジェクトで開発されるはプログラムが必要です．Linus Torvalds 氏が Linuxずでしたが，Linux があるので現在はそれが使われてKernel を開発した時点で，それらのアプリケーショいます．

ンはすでにこの世に存在していました．Linux システ● GPL に関して

ムはそのアプリケーションやツールを Kernel に組み合GNU プロジェクトが提唱するフリー・ソフトウェわせて完成させたものです．そのアプリケーションやアのライセンスのことを GPL と呼びます．ソフトウ

図1
GNU プロジェクト（http://www.gnu.org/home.ja.html）

6

序章

GCC とは何か？

図2
GNU プロジェクトに関する詳細（http://www.gnu.org/gnu/thegnuproject.html）

ェアとそれを使用するユーザに，使用・複製・変更・ルとのリンクを認めています．

再配布の自由を与えることを目的としています．

● GNU ツールに関してフリーソフトウェア財団（Free Software Foundation ： FSF）がソフトウェアにさまざまな自由を与え

GCC を使うことはできても，それを使いこなしている人はまだまだ少数だと思います．

る権利として提唱しているコンセプトである

たとえば GCC のコマンド・オプションについての「Copyleft」と，そしてそれを保証するためのライセ情報はあっても，それを使うとどうなるのか，またどンスが GPL です．GNU プロジェクトの成果物は，そのようなプログラムができるのかといった情報はインのほとんどが GPL によって配布されています．

ターネット上でさえも皆無に等しい状態です．英語でGPL のソフトウェアは必ずソース・プログラムとと書かれた海外の情報については深く調査していません

もに頒布，複製されます．もしソース・プログラムをが，それを見つけても翻訳しながら使うのはなかなか付けずに頒布する場合は，ソース・プログラムを確実めんどうなことです．に入手できる手段を提供することが義務付けられています．
そして，下記のような条件が付けられます．
① ソフトウェアを，使用・複製・変更・頒布したり，新しいオリジナルなフリー・ソフトウェアの一部として利用できること② 変更・改良されたソフトウェアは GPL に従って頒布されること③ プログラムの全部あるいは一部を用いて作られたソフトウェアは GPL に従って頒布されること④ 基本的に無保証であり，そのソフトウェアが原因でトラブルが生じても作者に責任はないこと
なお，LGPL（GNU Lesser General Public License）というライセンスもあり，これは非フリーなモジュー

本書では GNU ツールの中で GCC に関して徹底的に使い込んでみたいと思います．
GNU ツールは，1984 年にプロジェクトが開始されたそうです．詳しいことは，
http://www.gnu.org/home.ja.html
でいろいろな情報が得られます．
なお，GNU プロジェクトについては Richard M.
Stallman 氏の著作である書籍『フリーソフトウェアと自由な社会』（アスキー）に詳しく書かれています．
GNU の「フリー・ソフトウェア」に関する考え方をそこから抜粋します．
¡いかなる目的でもそのプログラムを実行する自由がある¡自分のニーズに合わせてそのプログラムを修正する

7

自由がある（この自由を実際に活用するためには，になりました．

ソース・コードを自由に入手できなければならな

二つ目の PGCC（Pentium GCC）は，GCC をベースい．ソース・コードなしにプログラムに変更を加えとして Pentium プロセッサやその互換チップでの性るのは極めて困難なため）能向上に重点を置いたものです．pgcc-1.1.3 では¡その複製を無料でも有料でも再配布する自由がある

MMX オプションが追加されました．

¡コミュニティがあなたの改善作業によって恩恵が受

ちなみに，Linux の配布パッケージの一つであるけられるよう，修正したプログラムを配付する自由「Stampede GNU/Linux」は，そのすべてのバイナリがあるが PGCC でコンパイルされています．Stampede によ

よく誤解されているのですが，「フリー」の意味がれば「一般の配布パッケージと比較して 20%〜 30%ほあります．これは自由のことをいうのであって，値段どパフォーマンスが上がっている」とのことです．のことではありません．

三つめの AGCC（Athlon GCC）は，PGCC をベース

図 2 に示す Web ページに GNU プロジェクトに関すとして Athlon プロセッサをターゲットに最適化を施る文章があります．興味のある方はお読みください．

したコンパイラです．同時に PGCC のバグ・フィック

GNU ツールの中には，たくさんの言語コンパイラスも行われているので，Athlon ユーザでなくとも使やそのほかのツールがあります．はじめに皆さんが一番使うであろう GCC に関する事柄について述べます．

う価値はあるでしょう．
ここで述べた EGCS や PGCC，AGCC は FSF が直接かかわっているものではありません．前述の「フGCC の機能リー・ソフトウェア」の考え方によって別のプロジェクトとして作られています．

現在の最新バージョンは 2005-07-07 に公開された

しかし，PGCC や AGCC の性能が優れているため，4.0.1 です．本書では，主として 3.3.5 のオプションを現在では本来の GCC に吸収され，プロジェクトも統扱っていますが，4.0 との違いを表と文章でも説明し合されています．ています．以降，特に断りがない場合，GCC は FSF
版 GCC のことを指します．GCC の公式サイトは，http://gcc.gnu.org/です．

なお，Windows では GNU ツールを動作させるエミュレータとして Cygwin があります．この上で GCCを動かすことが可能です．
GCC は多くのプロセッサで動作するため，組み込また，GCC は C 言語だけのコンパイラではありませみ分野でも広く使われています．GCC 本体と GCC でコん．GCC コンパイラは，C 言語，C++，Objective C，ンパイルしたバイナリは 16 ビットから 64 ビットまで

Fortran で書かれたプログラムをコンパイルすること数多くの CPU で動作します．もちろん標準的なも可能です．本書では，C 言語の機能について説明しLinux ディストリビューションには GCC が付属してていきます．なお，GCC の機能を有するのは FSF のいますが，組み込み用の場合は自分でインストールしGCC だけではありません．

なければなりません．

まず最初に，EGCS（Experimental/Enhanced GNU

最新の 4.0 では以下のようなハードウェア・コンフ

Compiler System）が挙げられます．これは gcc-2.8.xィグレーションが可能です．

をベースとして数値演算関係の最適化能力を中心に，

M680x0 Options

さまざまな改良を施したコンパイラです．GCC のβ

M68hc1x Options

版として EGCS Steering Committee によって開発・

VAX Options改良が行われていました．1999 年 4 月 27 日に FSF は，

SPARC Options

C コンパイラ『egcs』を開発している EGCS 運営委員

ARM Options会（EGCS Steering Committee）が，GNU のメンテナ

MN10300 Options

として，GNU C コンパイラ（GCC）の開発を引き継ぐ

M32R/D Options

ことを発表しました．これによって，EGCS 運営委員

IBM RS/6000 and PowerPC Options

会は GCC 運営委員会（GCC Steering Committee）と名Darwin Options

称を変え，今後の GCC のリリースに責任を負うこと

MIPS Options

8序章

Intel 386 and AMD x86-64 Options

GCC とは何か？

それは，C 言語の標準とされていた文献である「プHPPA Options

ログラム言語 C」（共立出版）にいくつかあいまいな部

Intel 960 Options

分が存在していたためです．

DEC Alpha Options

そこで，ISO と ANSI は共同で C 言語の規格の標準

DEC Alpha/VMS Options

化を進めました．その結果，1989 年 12 月に規格が策H8/300 Options

定されました．これは「C90」と呼ばれています．

SH Options

1999 年 12 月には，ISO で規格の改定が行われ，新Options for System V

たに規格が策定されました．これは「C99」と呼ばれ

TMS320C3x/C4x Optionsています．「C99」については第 13 章で解説します．

V850 Options

このような歴史のある C 言語に新たな潮流を作り出ARC Options

したのが，Richard M. Stallman 氏です．GNU プロジェ

NS32K Options

クトの創始者である彼は数々のフリー・ソフトウェア

AVR Options

を作る道具として GCC を企画しました．

MCore Options

それはフリー・ソフトウェアを商用ソフトウェアでIA-64 Options

コンパイルすると著作権の問題が発生するためです．

D30V Options

1980 年代中期から開発された GCC は，1994 年にS/390 and zSeries Options

バージョン 2 がリリースされて実用的レベルに達しま

CRIS Options

した．もちろん Richard M. Stallman 氏だけではなく，MMIX Options

Steve Jobs 氏の NextComputer 社，また世界中の優秀PDP-11 Options

な「ハッカー」（ クラッカーではない）の手に助けられ

Xstormy16 Optionsてリリースされたことは言うまでもありません．

FRV Options
Xtensa Options

C 言語と GCC

GCC と組み込み
GCC は組み込み分野でも大いに役立っています．かつて，組み込み機器の開発にはアセンブラが使用され

C 言語は 1972 年にアメリカの AT&T ベル研究所におていました．極限までプログラムのサイズを小さくすいて，Dennis M. Ritchie 氏によって設計されました．

るためであり，商用の C 言語コンパイラが高価だった

参考となった言語は Martin Richards 氏が開発したためでもあります．時と場合によっては「ハンド・ア

BCPL 言語，そしてそれを参考にして Ken Thompson

センブル」でコードを書かなければなりませんでした．

氏が開発した「B 言語」です．

現在は GCC のターゲット CPU が多彩になったため，当初の目的はミニオペレーティング・システムであクロス・コンパイラさえ構築すれば，開発工数を大幅る UNIX を開発することでした．しかし，UNIX をはに減少させることができます．また，独自 OS で動作じめとする各種 OS 上で動くアプリケーション開発にする組み込みが当たり前だったため，デバッグにも苦も用いられるようになり，世界的に普及したため，ほ労したものですが，今は GDB（GNU Debugger）が使かの OS やメインフレームにも普及しました．初期のえるため，かなり楽になりました．

パーソナル・コンピュータにおいても，BASIC にあ実用的な話としては，Linux ザウルスで動作するアきたらない人々が C 言語でプログラムを作ったので，プリケーションを作りたい場合は，XScale 向けのク普及に弾みがつきました．

ロス・コンパイル環境を別のパソコンに構築すれば十もちろん UNIX や Linux だけではなく，Windows，そして MacOS も C 言語で開発されています．あらゆ分です．小さな Web サーバを動作させて楽しむのもまた一興です．

るアーキテクチャに広まったため，初期の頃は，使用

もちろん Qtopia の実行環境もパソコン上に構築でするコンパイラによって仕様が異なるという問題もあきるので GUI ツールを作った場合のテストも問題なりました．

くできます．

9