boostの手動インストールメモ

実験サーバに入っているのboostのバージョンがバージョンが古すぎたので,最新のバージョンのものを自分用にインストールしました.

背景

boost/tokenizer.hppをインクルードしてコンパイルしたら,以下のようなエラーがズザーっと出た.

In file included from /usr/include/boost/mpl/apply.hpp:23:0,
from /usr/include/boost/iterator/iterator_facade.hpp:34,
from /usr/include/boost/iterator/iterator_adaptor.hpp:15,
from /usr/include/boost/token_iterator.hpp:21,
from /usr/include/boost/tokenizer.hpp:20,
from tokenize.cc:9:
/usr/include/boost/mpl/apply_wrap.hpp:81:31: エラー: トークン "(" の前に二項演算子がありません
/usr/include/boost/mpl/apply_wrap.hpp:173:31: エラー: トークン "(" の前に二項演算子がありません
In file included from /usr/include/boost/mpl/bind.hpp:27:0,
from /usr/include/boost/mpl/lambda.hpp:18,
from /usr/include/boost/mpl/apply.hpp:25,
from /usr/include/boost/iterator/iterator_facade.hpp:34,
from /usr/include/boost/iterator/iterator_adaptor.hpp:15,
from /usr/include/boost/token_iterator.hpp:21,
from /usr/include/boost/tokenizer.hpp:20,
from tokenize.cc:9:
/usr/include/boost/mpl/apply_wrap.hpp:81:31: エラー: トークン "(" の前に二項演算子がありません
/usr/include/boost/mpl/apply_wrap.hpp:173:31: エラー: トークン "(" の前に二項演算子がありません

こいつは,なんたるやと思って調べても情報がない.とりあえず,gcc4.6でコンパイルするのをやめて,gcc4.1でコンパイル...エラーはでない.これはもしやと思って,boostのバージョンを調べてみたら1.33.1.ちなみに最新版は1.48.0.うん,これはもう古いとしか考えられない.どうして実験サーバにプリインストールされているパッケージはこう古いのか.と嘆いていても仕方ないので,boostの手動インストールを試みます.

ちなみにboostのバージョンを調べる方法はここ.

銀天ライブラリ 導入方法

boostのインストール

まず,boostの最新版を手に入れます.場所は以下.

Boost C++ Libraries - Browse Files at SourceForge.net

ソースを手に入れたらビルドします.一部のライブラリはビルドしなくても使えるようですが,まぁどうせなのでちゃんとやることにします.以下のサイトを参考にしてやってみました.

Boost.Buildで複数のバージョンのgccを切り替えて使う方法 - fjnlの生存記録のような何か
Let's Boost - インストール方法
Boost C++ライブラリのビルドとインストール - reflux flow

実験サーバではgcc4.1とgcc4.6が共存していたので,bjamで使うコンパイラを指定します.設定ファイルを置く場所は,いくつかあるみたいですが,今回は$HOMEの場所に置きます.以下ではgcc4.6を指定しました.

$ cd ~
$ echo using gcc : 4.6: g++-4.6 \; > site-config.jam

次に,boostをビルドします.INSTALL_PATHには,ライブラリをインストールしたい場所を指定してください.

$ wget http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.tar.gz/download
$ tar xzf boost_1_48_0.tar.gz
$ cd boost_1_48_0
$ ./bootstrap.sh    <- bjam, b2の生成
$ ./bjam --prefix=INSTALL_PATH --toolset=g++-4.6 <- toolsetにはsite-config.jamで設定したものを使う

これでOKかと思ったのですが,どうも指定先にインストールされていなかったので,下記のサイトにあったように./b2をやってみました.

https://sites.google.com/site/boostjp/howtobuild

$ ./b2 install --prefix=INSTALL_PATH

まぁこんな感じでインストールできたのですが,もしかしたら./bjamはいらない子だったのかも../bootstrap.shで「ビルドするためには./b2を走らせろ」とかかいてあったしなぁ.まぁとりあえずインストールできたのでよしとする.

# ./bootstrap.sh --help
# とかすると,色々設定項目があることに今更気づいた.
# 今度インストールする機会があったらもう少し考えてみよう.
# boost::pythonとか使いたい人はpythonのパスを指定する必要があるみたい
# インストールパスの指定もここですることができたから,
# もしかしたら,ここで指定することでbjamだけでもインストールできた?

boostへPathを通す

インストールは終わったのですが,このままではデフォルトで1.33.1のboostがインクルードされてしまうので,./bash_profileなどに,以下の記述をしておきます.

export CPLUS_INCLUDE_PATH=/disk5/nakashima/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/boost/include:$CPLUS_INCLUDE_PATH

これで,今回インストールしたboostがインクルードされるようになりました.確認は,最初に書いた方法を利用すれば大丈夫です.