C++ には Boost という世界的に有名なライブラリがあります.非常に便利な機能が盛り沢山 (それはもう,使う前から使えばソースコードの量が激減することが火を見るより明らかだと感じるほどに) なのですが,現在は標準で入っていません.なので,この今現在これの恩恵に与ろうと思ったら独自で追加してやる必要があります.
今回は,自分が Vine Linux 4.2 に Boost ライブラリを導入した手順を説明を交えて残しておこうと思います.これで 1 人でも多くの人が Boost の世界に触れやすくなってくれれば嬉しいな.
※対象読者
・gcc, g++ での -I -L の意味が分かる方
・Linux で超基本的なコマンド (cd, cp, mkdir, tar 程度) は知っている方
・環境変数とかシェルとか,いわゆる UNIX の思想がいまいち分からない><;;な方 ←重要w
(よーするに C++ 言語は Windows で覚えました,な方ですかねw)
まず,適当な作業ディレクトリに以下のようなソースファイルを作りましょう.
-- test.cpp --
#include <boost/function.hpp>
int main()
{
return 0;
}
----
※ファイル名は何でもいいですよ.自分は BoostTest.cpp にしました.
さて,これをコンパイルしてみます.
g++ -o test test.cppのに使った
…もちろん, boost/function.hpp なんてヘッダファイルねーよ!と言われてコンパイルは出来ません.
これがエラーなくコンパイル出来るようにすることが,今回の目的,つまりプログラミング言語の練習時における Hello, World! プログラムに相当するものであるとお考え下さい.
※以下,ディレクトリ構成に関してしつこ過ぎると思われる記述があるかもしれないが,その辺でミスると必ず後に響くので,適当な省略や前提知識を必要とする書き方をしないことを徹底する.
※基本的には
Let's Boost を参考にする.
-------- 以下インストール手順 --------
ルートユーザでログインする
↓
Let's Boost の「2. Boost のインストール方法」を読む.
↓
「インストーラやパッケージを使う方法」
↓
Vine Linux 4.2 にはパッケージがなさげ
↓
「手動インストール」
↓
紹介されているリンク
(http://sourceforge.net/project/showfiles.php?group_id=7586) から Boost のパッケージ (Package : Boost | Release : 1.35.0 | Date : March 29, 2008 ←となっているもの) をダウンロード (ファイル名は boost_1_35_0.tar.gz).
(※日付やバージョン番号は後日変わっていることもありえます.同じのが無いからと言って諦めないように.)
↓
tar -xvzf boost_1_35_0.tar.gz で展開
↓
展開して出てきた boost_1_35_0/ 内に大量のファイル (INSTALL, boost-build.jam, ...) がある.これが Boost ライブラリのセット.
↓
/usr/local/lib/ に boost/ というディレクトリを作ってやる.
(※/lib/ /usr/lib/ /usr/local/lib/ の 3 つの違いに関しては後述)
↓
/usr/local/lib/boost/ に先ほど展開した大量のファイルを移動.
/usr/local/lib/boost/ の中に INSTALL, boost-build.jam, ... があるという形にしてやる.
↓
「ビルド」
↓
機能が制限されてはつまらないので全てをインストールする.
↓
「フルインストール方法」
↓
「UNIX 系環境の場合」を参考にする.
/usr/local/lib/boost/ にて,
./configure
make
make install
を順に実行する.警告やエラーメッセージがちょくちょく出るが,あまり問題はなさそう (この辺は私もよく分かりません(^^;).
(※ちなみに ./configure → make → make install の流れは UNIX 環境で何かをインストールするときにしょっちゅう使います.この流れを覚えておいて損はないでしょう.)
↓
これでルートユーザのお仕事は終わり.次は個人ユーザの方での設定を行う.
↓
ちなみにここで「ビルド」の項目が終了.
次の個人ユーザで行う方は「パスを通す」にあたる.
↓
ホームディレクトリにある (※隠されています) .bashrc というファイルをエディタで開く.
↓
ファイルの最後に
export CPLUS_INCLUDE_PATH=/usr/local/lib/boost
という行を追加してやる.=の前後にスペースを入れてはいけない (※自分はスペースを入れてしまいハマった orz).
これで,コンパイラがヘッダファイルを探すとき,デフォルトでこのディレクトリも見てくれるようになる (※標準では stdio.h や iostream.h などが入っているディレクトリしか探さない).
↓
端末を再起動
↓
echo $CPLUS_INCLUDE_PATH とプロンプトに打ち込む.ここで
/usr/local/lib/boost と表示されれば成功.
-------- インストール手順終了 --------
ここまで出来たら,もう一度最初に作ったソースファイルのコンパイルをしてみましょう.きっと,何の文句も言われずにコンパイルが終了し,そしてリンクが終了します.
ちなみに,私は試していませんが,ルート権限はなくても個人ユーザの範疇で Boost のインストールは終わりそうな気がします.個人のホームディレクトリ以下に ~/lib/boost/ とでも作ってやって,ここで /usr/local/lib/boost/ でやったことと同じこと (./configure → make → make install) をやれば,ライブラリのインストールは出来るんじゃないかと思います.あとはパスを通すときに /home/ユーザ名/lib/boost を指定してやれば…
誰か試してみて (ぇ
[2008-07-02T19:59 追記]
自宅の Linux マシンで試してみた結果,ルート権限なしで,個人ユーザの範疇で全てインストール出来ました.
[追記ここまで]
さて,以下は捕捉説明です.単に使えればいいや,な人は読むこともないかと.
※/lib/ /usr/lib/ /usr/local/lib/ の違い
/lib/ は OS が使う動的ライブラリの置き場所, /usr/lib/ はディストリビューション (最初から入ってるいわゆるアプリケーションとか?) が使う動的ライブラリの置き場所,という感じらしいです.実際覗いてみると,.so ファイル (Windows で言うところの DLL ファイル) ばかりです.
個人が持ってきたライブラリなどは,/usr/local/lib/ に放り込むのがスタンダードらしいです.
※.bashrc と .bash_profile
パスを通す,というのが,どうやら自分はこれを始める前まで全然分かっていなかったようです.
とりあえず結論だけ書いてしまえば .bashrc に
export 環境変数名=値 と書いてやればいいです.追加の場合は
export 環境変数名=$環境変数名:値 としてやればいいです (i = i + 1; みたいな感じ.追加するときは : で区切る.).
ここで困ったちゃんなのが,サイトによってはこの設定を「.bash_profile に書け」と言ってるんですよね.ところが,どうもうちの Vine Linux 4.2 だと .bash_profile が読まれないようで… この辺,読み込みの優先順位だとかそういう細かいことが関与してくるのでは?という御意見も頂きましたが,まだ自分でも分かっていないのでここでは言及出来ません.
この辺のことに関しての参考サイト,というより自分が参考にしたサイトとして,次の 3 件を挙げておきます.
・
http://cisco250.hp.infoseek.co.jp/Linux/path/
・
http://www.itmedia.co.jp/help/tips/linux/l0284.html
・
http://www.usupi.org/sysad/118.html
では内容はこのくらいにして,最後に謝辞として Twitter で助言してくれた方々の名前を紹介しておこうかと.
@ycums さん,
@hide32767 さん,
@konosuke さん,
@syo68k さん,数々の情報や助言の提供,本当にありがとうございました.そちらからの手助けの数々がなければ,比喩抜きで私の Boost 導入はまったく進展しなかったでしょうw 厚く御礼申し上げます.
なお間違いや「ここはこうするともっといいんじゃね?」的な御意見は,メールなりコメントなり Twitter なり、それこそ mixi や Filn のメッセージでも構いませんので,送っていただけると嬉しいです.
[2009-07-13T00:14 追記]
何故かこのエントリだけスパムコメントが激しいのでコメントを受け付けないように設定しました.
[追記ここまで]
hide32767 (2008-07-03T00:25:05)
環境変数についてはsh系なら.profile,csh系なら.loginに書いとけと言うのが常道みたいですね。
cf.http://his.luky.org/ML/vine-users.5/msg00054.html
とりあえず現アクティブなシェルに即時に設定したいなら
プロンプトでexport ~と打つのが早道、と。
どうもゴチャゴチャ言って色々とややこしくしてしまったかもしれません。
hide32767 (2008-07-03T00:28:27)
時間や興味があればbashのmanを読んでおくのもよろしいかと。
http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html
か (2008-07-03T01:25:19)
対話シェル,ってーのは,Vine だと GNOME 端末のことですよね?Windows で言うところのコマンドプロンプト.
つまり昨日 .bash_profile に書いた設定が全然反映されないよぅ>< …って言ってたのは,同じユーザとしてログインしっぱなしで試していたから,ということですか.
またこの辺りの話題だけに特化したエントリも書きたいですなぁ.分かりやすく,分かりやすくを心掛けた内容で.