gcc4.9.2 をインストールする

# gcc 4.4.7 から gcc4.9.2 にバージョンアップした覚書

## 動機
io.js をやりたかったのに、gcc4.4.7 じゃだめって言われたのでいっそ 4.9.2 にしようと思い立ったから.

## 参考 URL
須良さんの記事のバージョン変更版です.
ありがとうは須良さんへ.
http://s243k.blog65.fc2.com/blog-entry-486.html

## 手順


### 必要なものをインストールします.

```bash
$ sudo yum install gcc gcc-c++ glibc-devel.x86_64 glibc-devel.i.686
```

### 実行時パスを設定します.

```bash
$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
$ export LD_RUN_PATH=/usr/local/lib:$LD_RUN_PATH
```

### 共有ライブラリを設定します.

```bash
vi /etc/ld.so.conf
```

以下を記載してください

```conf
include ld.so.conf.d/*.conf
/usr/local/lib # 新規追加
```

### GMP をインストールします.
https://gmplib.org/

GMP は任意精度算術ライブラリです.

```bash
$ mkdir ~/gcc-install; cd ~/gcc-install; mkdir gmp; cd gmp
$ wget ftp://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.xz
$ tar xvf gmp-6.0.0a.tar.xz
$ cd gmp-6.0.0
$ mkdir build; cd build
$ ../configure --enable-cxx && make -s -j2 && make check -s -j2 && sudo make install
```

### mpfr をインストールします.
http://www.mpfr.org/

MPFR は高精度浮動小数点算術ライブラリです.

```bash
$ cd ~/gcc-install; mkdir mpfr; cd mpfr
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.gz
$ tar xvzf mpfr-3.1.2.tar.gz
$ cd mpfr-3.1.2
$ mkdir build; cd build
$ ../configure && make -s -j2 && make check -s -j2 && sudo make install
```

### mpc をインストールします.
http://www.multiprecision.org/

MPC は複素数算術ライブラリです. (MPFR と GMP に依存している模様)

```bash
$ cd ~/gcc-install; mkdir mpc; cd mpc
$ wget http://www.multiprecision.org/mpc/download/mpc-1.0.2.tar.gz
$ tar xvzf mpc-1.0.2.tar.gz
$ cd mpc-1.0.2
$ mkdir build; cd build
$ ../configure && make -s -j2 && make check -s -j2 && sudo make install
```

### isl をインストールします.
http://isl.gforge.inria.fr/

ISL は Integer Set Library と言い、線形制約条件で囲まれた整数点の関係を操作するライブラリだそうです. (正直よくわかりません)

バージョンは 0.12.2 でインストールしてますが、確か 0.14 でインストールした記憶も…うーん….

```bash
$ cd ~/gcc-install; mkdir isl; cd isl
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2
$ tar xvf isl-0.12.2.tar.bz2
$ cd isl-0.12.2
$ mkdir build; cd build
$ ../configure && make -s -j2 && make check -s -j2 && sudo make install
```

一部環境では以下のようにする必要があるそうです。(ご指摘ありがとうございました!)

* mac yosemite の場合

```
$ cd ~/gcc-install; mkdir isl; cd isl
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2
$ tar xvf isl-0.12.2.tar.bz2
$ cd isl-0.12.2
$ mkdir build; cd build
$ "../configure --with-gmp=build --with-gmp-builddir=/Users/hoge/bin/" && make -s -j2 && make check -s -j2 && sudo make install
```

### CLooG をインストールします.
http://www.cloog.org/

CLooG はコンパイラの最適化の為のライブラリおよびフリーソフトウェアです.

```bash
$ cd ~/gcc-install; mkdir cloog; cd cloog
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz
$ tar xvzf cloog-0.18.1.tar.gz
$ cd cloog-0.18.1
$ mkdir build; cd build
$ ../configure && make -s -j2 && make check -s -j2 && sudo make install
```

一部環境では以下のようにする必要があるそうです。(ご指摘ありがとうございました!)

* mac yosemite の場合

```
$ cd ~/gcc-install; mkdir cloog; cd cloog
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz
$ tar xvzf cloog-0.18.1.tar.gz
$ cd cloog-0.18.1
$ mkdir build; cd build
$ ../configure --with-gmp=build --with-gmp-builddir=/Users/hoge/bin/ && make -s -j2 && make check -s -j2 && sudo make install
```

### やっと gcc をインストールします.
https://www.gnu.org/software/gcc/

いわずもがなですね、今回の目的です.

```bash
$ cd ~/gcc-install
$ mkdir gcc4.9.2; cd gcc4.9.2
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.gz
$ tar xvzf gcc-4.9.2.tar.gz
$ cd gcc-4.9.2
$ sd mkdir build; cd build
$ ../configure --disable-multilib --enable-languages=c,c++,java --program-suffix=-4.9.2 && make -s -j2 && sudo make install
```

ポイントは 64bit 環境では `--disable-multilib` を指定することです.
じゃないと 32bit 用のヘッダを見に行こうとして怒られます.

configure か make で転ぶ場合は、環境変数を確認してください.

実行時パスを設定したつもりで以外と忘れていることも考えられます.
sirone はこれで 1 時間ほど Google 先生と格闘しました….

### インストールできました？

```bash
$ g++-4.9.2 --version
```

### g++-4.9.2 とかあり得ないと思ったあなたへ. alternatives ノススメ.

alternatives を設定して、別バージョンへの対応も視野に入れておきましょう！

```bash
$ sudo yum remove gcc gcc-c++
$ sudo update-alternatives \
--install /usr/bin/gcc gcc /usr/local/bin/gcc-4.9.2 20 \
--slave   /usr/bin/g++ g++ /usr/local/bin/g++-4.9.2 \
--slave   /usr/bin/gcj gcj /usr/local/bin/gcj-4.9.2
$ update-alternatives --display gcc
```

これで `$ gcc --version`　とやった時に、4.9.2 が表示されれば無事終了です！
長々とお疲れ様でした！

それでは良きエンジニアライフを(^w^)ﾉｼ