【Linux】gccをコンパイルしてインストールする方法

新しいバージョンのgccを使用したい時にソースをコンパイルしてインストールする方法のメモになります。

必要な環境及びライブラリ

gccのソースを展開したディレクトリのINSTALL/prerequisites.htmlに必要な環境及びライブラリが記述されています。

HTMLで記述されていますので以下のようにelinksコマンドなどで確認することができます。

elinks INSTALL/prerequisites.html

基本的に以下のライブラリが必要になります。

※gccのバージョンによって必要なライブラリやバージョンが若干異なりますので注意

  • zlib
  • GNU Multiple Precision Library (GMP)
  • MPFR Library
  • MPC Library
  • isl Library
  • (CLooG Library)

※zlibはgccに同梱しているものを使用することが可能です。(gccのconfigureで–with-system-zlibを付けない)

※CLooGは最近のgccでは必要なくなっています。

※基本的なコンパイル環境は必須です。

コンパイルとインストール

共通

各ソフトウェアのダウンロードファイルは圧縮されていますので、以下のように解凍する必要があります。

※gzファイルの場合の解凍
$ tar zxf abc-x.y.z.tar.gz
※bz2ファイルの場合の解凍
$ tar jxf abc-x.y.z.tar.bz2
※xzファイルの場合の解凍
$ tar Jxf abc-x.y.z.tar.xz

一般的にabc-x.y.zというディレクトリに解凍されていると思います。

各ソフトウェアはconfigure後、以下のようにビルドとインストールを行います。

$ make -j`nproc`
# make install

ビルド時の-jオプションはコンパイルを並列に行う数を指定します。

nprocコマンドでCPU数を指定していますが上手く動かない場合は直接数字を指定して下さい。(例:-j2)

root権限でmake installするとconfigure時に–prefixで指定した場所にインストールされます。

configure時に–prefix指定が無い場合、大抵のソフトウェアで/usr/localがデフォルト値となっています。

自分でコンパイルしたライブラリ関係はデフォルトでインストールした場合、/usr/local/libにインストールされます。

/usr/local/libがldのパスとして存在していない場合は、/etc/ld.so.confへライブラリパスの追加が必要となります。

※パスの追加後、root権限で以下を実行してキャッシュを更新
# ldconfig

zlib

システムにインストールされているzlibやgccに同梱されているzlibを使わず、自分でコンパイルしたzlibを使いたい方は、コンパイルしてインストールする必要があります。

解凍したディレクトリに移動してconfigureを実行します。

$ ./configure

この後make, make installしてインストールします。(※他のライブラリも同様の手順ですので共通の項目を参照してください)

GNU Multiple Precision Library (GMP)

必須のライブラリです。

システムにインストールされているものと異なるバージョンが必要な場合はコンパイルして入れる必要があります。

configureは以下のようになります。

※32bit CPUの場合
$ ABI=32 ./configure --enable-alloca=alloca --enable-shared --disable-static
※64bit CPUの場合
$ ./configure --enable-alloca=alloca --enable-shared --disable-static

MPFR Library

同じく必須のライブラリでconfigureは以下のようになります。

$ ./configure --enable-thread-safe --disable-static

MPC Library

同じく必須のライブラリでconfigureは以下のようになります。

$ ./configure --disable-static

isl Library

同じく必須のライブラリでconfigureは以下のようになります。

$ ./configure --disable-static --with-gmp=system

CLooG Library

古いバージョンのgccでは必須のライブラリでしたが新しいバージョンのgccでは必要なくなっています。(※INSTALL/prerequisites.htmlを確認して下さい)

configureは以下のようになります。

$ ./configure --with-isl=system --with-gmp=system --disable-static

the GNU Compiler Collection

必要なライブラリがインストールできたらgccのconfigureを行います。

※解凍したgccのディレクトリに移動したらビルド用のディレクトリを作成します
$ mkdir mk.d
$ cd mk.d
$ ../configure --disable-bootstrap --enable-languages=c,c++ --program-suffix=-6 --disable-multilib --enable-threads=posix --enable-tls --disable-nls --enable-lto --with-local-prefix=/usr/local --disable-static --enable-shared --enable-linker-build-id --without-included-gettext --enable-clocale=gnu --with-system-zlib --enable-plugin --enable-checking=release --enable-__cxa_atexit --enable-initfini-array --enable-gold=yes

–disable-bootstrapでビルド用のgccを作成する時間を抑えています。入れようとしているgccバージョンでビルドしたgccをインストールしたい方は外して下さい。

–enable-languages=c,c++でインストールする言語を絞っています。fortranなど他の言語が必要な方は追加して下さい。

–program-suffix=-6でgccコマンドがgcc-6としてインストールされます。必要に応じて変更や削除を行って下さい。

–disable-multilibで現在の環境のライブラリに限定しています。x86とx64をビルドする必要がある場合は外して下さい。

–disable-nlsでgccのエラーメッセージ等の多言語対応を禁止しています。必要な方は外して下さい。

–with-system-zlibでgccのディレクトリに含まれるzlibを使わないようにしています。

–enable-gold=yesでgold(リンカ)もインストールしています。必要ない方は外して下さい。

必要のないライブラリをインストールしたくない場合は–disable-libquadmathなど、個別にライブラリを指定して除外して下さい。

configureのオプションについては以下で簡単な説明を調べることができます。

※gcc解凍ディレクトリ直下にいる想定
※メインのconfigureオプションの簡単な説明
$ ./configure --help
※メインのconfigureから呼び出されるサブモジュールのconfigureも全て表示
$ ./configure --help=recursive

grepするなりlessにパイプするなりファイルにリダイレクトして見るなりして下さい。