本物のC

環境構築:UNIX系の場合*


gccをインストールする

UNIX 系ならば大体は元から gcc が使えるので何もしなくていいと思いますが、最新版を使いたい人とかの為にソースコードから gcc をインストールする方法を説明します。

gcc のコンパイルは非常に時間が掛かります(場合によって一時間以上)。

ソースコードの入手

ディレクトリは~/srcで作業を行うとします。

gcc の公式サイトのミラーサイト一覧から最寄りのサイトを選び、releases/ の中から好きなバージョンのgcc-*.*.*.tar.bz2をダウンロードします。ここではgcc-5.3.0.tar.bz2とします。これを解凍して

~/src$ tar -xvf gcc-5.3.0.tar.bz2

出来たソースディレクトリに移動し、contrib/download_prerequisites を実行して gcc の利用するプログラムのソースコードをダウンロードします。

~/src$ cd gcc-5.3.0/ ~/src/gcc-5.3.0$ ./contrib/download_prerequisites

gcc のビルドにはソースコードと異なるディレクトリを用いる事が強く推奨されているので、ソースディレクトリを抜けて例えば gcc_build を作ります。

~/src/gcc-5.3.0$ cd .. ~/src$ mkdir gcc_build ~/src$ cd gcc_build

設定

ソースディレクトリの configure に様々なオプションを付けて実行し、ビルドの設定を行います。

主要なオプションは以下の通りです(詳しくはconfigure --helpや「Installing GCC: Configuration」)。

--prefix=dirname
gccのインストール先を dirname に指定する。例えば--prefix=$HOME/localとすると、管理者権限が無くても自分のディレクトリにインストールができます。
--program-prefix=prefix
プログラム名の最初に prefix を付ける。
--program-suffix=suffix
プログラム名の最後に suffix を付ける。例えば--program-suffix=-5.3とすると、プログラム名はgcc-5.3となります。複数のバージョンを共存させる場合に有用です。
--disable-bootstrap
ブートストラップ・ビルドを無効にする。デフォルトでは、gcc は最初にビルドされた gcc 自身を使ってもう一度ビルドされ、更にそれを使って三度目のビルドが行われます。これをブートストラップ・ビルドと言って、コンパイラの最適化と検証の為に行われるのですが、大抵は一度きりでも問題ありません。
--enable-languages=lang1,lang2,...
コンパイラをビルドする言語を指定する。gcc 5.3.0 時点では ada、c、c++、fortran、go、java、jit、ito、lto、objc、obj-c++ が使えます。Ada、Go、JIT、Objective-C++ はデフォルトでは無効です。(JITは Just-In-Time compilation、LTOは Link-Time Optimization の機能サポートの意?)

例えば次の様に指定して実行します。

~/src/gcc_build$ ../gcc-5.3.0/configure --program-suffix=-5.3 --disable-bootstrap --enable-languages=c,c++

64ビット環境の場合

64ビット環境でconfigureを実行すると

... /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find crtn.o: No such file or directory collect2: error: ld returned 1 exit status configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.</pre>

とエラーが出たりします。

一つの解決策はconfigureのオプションに--disable-multilibを追加する事ですが、この場合にビルドした gcc でコンパイルしたプログラムは 64 ビット専用になる様です。

それが嫌な場合、32 ビットをターゲットする開発ライブラリを導入する事で解決できます。aptならば

$ sudo apt-get install libc6-dev-i386

を、yumならば

$ sudo yum install glibc-devel.i686

を実行しましょう。

ビルド

configureが無事に終われば、いよいよmakeでビルドを行います。

gcc のコンパイル自体にも C 及び C++ のコンパイラが必要なので、無ければパッケージマネージャ等でインストールして下さい。例えば Ubuntu では、OS のインストール直後だと C++ のコンパイラが入っていない為

$ sudo apt-get install g++

を実行する必要があります。

gcc は並列ビルドが可能で、-jN というオプションでジョブ数が指定できます。8 並列ならば

$ make -j8

を実行します。

インストール

悠久の時を経て無事にビルドが終了したら、バイナリをインストールします。

$ sudo make install

configure時に管理者権限が要らないインストール先を選んでいればsudoは不要です。

gccが実行できる事を確認すれば完了です。

$ gcc-5.3 --version gcc-5.3 (GCC) 5.3.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.