Linux Mint 17.1 "Rebecca" - Cinnamon (64-bit)でgcc 5.1.0をビルドしてインストール

Linux Mint 17.1 "Rebecca" - Cinnamon (64-bit)で、gcc 5.1.0を、ソースコードからビルドしてインストールする際、ハマったのでメモしておきます。たぶんUbuntuでも、同様の手順でインストールできるのではないかと思います。

当然ですが、コンソールでの作業になります。

基本的に、 [How to Manually Build and Install GNU Compiler Collection on Linux Mint](http://www.wikihow.com/Manually-Build-and-Install-GNU-Compiler-Collection-on-Linux-Mint "How to Manually Build and Install GNU Compiler Collection on Linux Mint") の通りに、インストールを進めます。

まず、ビルドに必要なライブラリをインストールします。

#gmp-6.0.0のインストール
まず、GMP（任意精度算術ライブラリ）をインストールします。*gmp-6.0.0a.tar.bz2* をダウンロードして、適当なディレクトリに解凍し、そのディレクトリに移動します。

```
$ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2
$ tar -jxvf gmp-6.0.0a.tar.bz2
$ cd gmp-6.0.0
```

そして、次のコマンドを実行します。

```
$ sudo mkdir /opt/gmp-6.0.0
$ ./configure --prefix=/opt/gmp-6.0.0 && make && make check && sudo make install
```

正しくビルド＆インストールされていたならば、以下のように表示されるはずです。
![gmp-6.0.0_Compile_Install.png](https://qiita-image-store.s3.amazonaws.com/0/58457/464e1649-9218-186f-411c-8fcb815fea04.png)

#MPFR-3.1.2のインストール
次に、MPFR（高精度浮動小数点算術ライブラリ）をインストールします。*mpfr-3.1.2.tar.bz2* をダウンロードして、適当なディレクトリに解凍し、そのディレクトリに移動します。

```
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.bz2
$ tar -jxvf mpfr-3.1.2.tar.bz2
$ cd mpfr-3.1.2
```

そして、次のコマンドを実行します。

```
$ sudo mkdir /opt/mpfr-3.1.2
$ ./configure --prefix=/opt/mpfr-3.1.2 --with-gmp=/opt/gmp-6.0.0 && make && make check && sudo make install
```

正しくビルド＆インストールされていたならば、以下のように表示されるはずです。
![mpfr-3.1.2_Compile_Install.png](https://qiita-image-store.s3.amazonaws.com/0/58457/39ce2cc7-2579-0117-e08c-4af29dd5aa04.png)

#MPC-1.0.3のインストール
次に、MPC（複素数算術ライブラリ）をインストールします。*mpc-1.0.3.tar.gz* をダウンロードして、適当なディレクトリに解凍し、そのディレクトリに移動します。

```
$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ tar -xvzf mpc-1.0.3.tar.gz
$ cd mpc-1.0.3
```

以下のコマンドを実行します。

```
$ sudo mkdir /opt/mpc-1.0.3
$ ./configure --prefix=/opt/mpc-1.0.3 --with-gmp=/opt/gmp-6.0.0 --with-mpfr=/opt/mpfr-3.1.2 && make && make check && sudo make install
```

正しくビルド＆インストールされていたならば、以下のように表示されるはずです。
![mpc-1.0.3_Compile_Install.png](https://qiita-image-store.s3.amazonaws.com/0/58457/d2b56993-0591-1abc-98c1-732fa4b20275.png)

#gcc-5.1.0のビルドとインストール
最後に、gcc-5.1.0をビルドしてインストールします。*gcc-5.1.0.tar.bz2* をダウンロードして、適当なディレクトリに解凍し、そのディレクトリに移動します。

```
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.1.0/gcc-5.1.0.tar.bz2
$ tar -jxvf gcc-5.1.0.tar.bz2
$ cd gcc-5.1.0
```

以下のコマンドを実行します。

```
$ sudo mkdir /opt/gcc-5.1.0
$ ./configure --prefix=/opt/gcc-5.1.0 --with-gmp=/opt/gmp-6.0.0 --with-mpfr=/opt/mpfr-3.1.2 --with-mpc=/opt/mpc-1.0.3 --disable-multilib --enable-languages=c,c++
$ make -j(thread num) && sudo make install
```

ここで、(thread num)には、並列ビルドに使用するスレッド数を指定します。
以上を実行すると、私の環境では、以下のようなエラーが表示されます。
![gcc-5.1.0_Compile_Error.png](https://qiita-image-store.s3.amazonaws.com/0/58457/846da8b6-d4bf-7132-632c-d5c99d504845.png)
いろいろ調べたところ、これは、`CPLUS_INCLUDE_PATH`（あるいは、`C_INCLUDE_PATH`）関連のエラーらしいです（参考：[g++ 4.7.1 compilation error : conflicting types for ‘strsignal’ - Stack Overflow](http://stackoverflow.com/questions/12255058/g-4-7-1-compilation-error-conflicting-types-for-strsignal "g++ 4.7.1 compilation error : conflicting types for ‘strsignal’ - Stack Overflow")

下図のように、私の環境では、`.bashrc`の`CPLUS_INCLUDE_PATH`をコメントアウトすると、問題なくビルドできました（なお、`source ~/.bashrc`ではダメで、再起動が必要のようです）。
![.bashrc_Comment_out.png](https://qiita-image-store.s3.amazonaws.com/0/58457/92f41e0d-3af2-26d7-e4ef-d6754d07a00d.png)

正しくビルド＆インストールされていたならば、以下のように表示されるはずです。
![gcc-5.1.0_Compile_Install.png](https://qiita-image-store.s3.amazonaws.com/0/58457/26154371-da64-8542-44f7-60e87cc824a6.png)

#/etc/profileと/etc/ld.so.confの編集
次に、/etc/profileに対して、次のコマンドを実行します。

```
sudo sh -c "echo 'export PATH=/opt/gcc-5.1.0/bin:\$PATH' >> /etc/profile"
sudo sh -c "echo 'export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu' >> /etc/profile"
```

次に、/etc/ld.so.confに対して、次のコマンドを実行します。

```
sudo sh -c "echo '/opt/gmp-6.0.0/lib' >> /etc/ld.so.conf"
sudo sh -c "echo '/opt/mpfr-3.1.2/lib' >> /etc/ld.so.conf"
sudo sh -c "echo '/opt/mpc-1.0.3/lib' >> /etc/ld.so.conf"
```

以下のコマンドを実行して、/etc/profileと/etc/ld.so.confの変更を反映させます。

```
sudo ldconfig -v
. /etc/profile
```

#インストールの確認
`$ printenv PATH`を実行し、以下のように、PATH環境変数に、`/opt/gcc-5.1.0/bin`が含まれていることを確認します。
![printenv_PATH.png](https://qiita-image-store.s3.amazonaws.com/0/58457/707ba52a-d4c1-fa48-b78d-b8704b614352.png)

`$ gcc --version`と、`$ g++ --version`を実行し、以下のように、5.1.0と表示されることを確認します。
![gcc-g++-version.png](https://qiita-image-store.s3.amazonaws.com/0/58457/93d88811-cfe3-77d6-1787-38355b5dff25.png)

#補足
なお、私の環境では、Boostのビルドで `/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found` と言われましたので、[GLIBCXX_3.4.20 not found, how to fix this error? - Stack Overflow](http://askubuntu.com/questions/575505/glibcxx-3-4-20-not-found-how-to-fix-this-error "GLIBCXX_3.4.20 not found, how to fix this error? - Stack Overflow") の通りに、

```
$ sudo apt-get install libstdc++6
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
```

としたら、解決しました。

以上で、gcc-5.1.0のビルドとインストールは完了です。お疲れ様でした。