Mackey's Lab

博士を取るまでの備忘録

GCC のバージョンを 4.9 に上げる

C++ プログラミングをしていて,C++11 の STL を利用したいときがある。

しかしながら、CentOS 6 とか Ubuntu 12 系列ではあらかじめ入っている(若しくは yum なり apt-get なりでパッケージとして簡単に導入できる)GCCのバージョンは 4.4 系である。残念ながらこれでは C++11 は利用できない。

C++11のどの機能をどの GCC バージョンから利用できるかは下記の本家サイトから確認できる。

C++0x/C++11 Support in GCC - GNU Project - Free Software Foundation (FSF)

 

GCC 4.7 から幾つかの機能が利用できるようになってきており,GCC 4.8 からはほとんどの機能が利用できるようだ。現在は GCC 4.9 があるので今回はこれにバージョンアップしたいと思う。環境は CentOS 6 だが Ubuntu でもあまり変わらないだろう。

バージョンアップの方法はネットでいろいろ公開されており,いろいろ試したが,下記のサイトが一番分かりやすくて良かった。

密かなITエンジニアの備忘録:gcc4.4.7 → 4.9.0にバージョンアップ

この記事は非常にシンプルであったが,幾つか詰まったところもあったのでそこを補完していこうと思う。

 

  1. gcc のソースをダウンロード
    下記のサイトより好きなバージョンの GCC をダウンロード。今回は gcc-4.9.1 を選択した。なおミラーサイトは当然 JAPAN を選ぶべき。今回 GCC をバージョンアップするマシンは WIDE バックボーンに近いところにあるので,ftp.tsukuba.wide.ad.jp を選択。

    GCC mirror sites - GNU Project - Free Software Foundation (FSF)

  2. ダウンロードしたファイルの展開
    ここで詰まることはなかった。tar コマンドで普通に展開すればよろしい。

  3. 必要なパッケージのダウンロード

    # cd gcc-4.9.1
    # ./contrib/download_prerequisites
    # yum -y install glibc-devel*
    # yum -y install gcc-c++*

    いわゆる依存関係にあるパッケージのダウンロード。download_prerequisites というスクリプトが勝手になってくれる便利。しかし,ちょっとここでハマる。このスクリプトは内部的に wget を利用してソースを取ってくるのだが,今回バージョンアップするマシンは実験ネットワーク内にあるため,インターネット接続するのにプロキシが必要なのだ。yum などでは /etc/yum.conf にプロキシの設定を書いているので問題ないが,wget でも同様に /etc/wgetrc にプロキシの設定を書く必要がある。注意すべきなのは http だけでなく ftp プロキシの設定も書く必要があるのだ。詳細は下記の記事へ。

     

    mackey-lab.hatenablog.com

     

  4. ビルド
    ここまでくれば後は簡単。
    # mkdir build# cd build
    # ../configure --disable-multilib
    # make 
    make には非常に時間がかかる。帰る前に make して明日来たら出来てるだろうと思い放置していたらエラーで止まってた。エラーの内容は

    cannot find neither zip nor jar

    zip or jar が無いですというもの。zip をインストールして再度トライ。
    yum install -y zip
    # make
    これでうまくいった。

  5. install & 確認
    普通に make install して gcc -v とすればバージョンが上がっていることがわかる。おわったー!

意外と時間が掛かった。あとはこの作業を繰り返して 72 台のサーバの gcc をアップするだけだ・・・つらい・・・