C++で正規表現を使う、FedoraでBoostをインストール
C++で正規表現を使う方法には、標準ライブラリを用いるか、Boostを用いるかの二つの方法があります。
以下の説明では、LinuxディストリビューションはFedora19を、コンパイラはGNU gcc 4.8.2を使っています。
標準ライブラリ
まず、C++の最新の標準ライブラリに入っているstd::regexを試しました。
#include <regex>
でインクルードできます。
GNU gcc 4.8.2の場合、まだ実験版なのでコンパイルオプション「-std=c++11」が必要です。
試してみると、正規表現にメタ文字を入れてコンパイルした場合に、コンストラクタがエラーを出します。
実験版のためと考えられるので、今回はstd::regexの使用を諦めました。
Boostのインストール
そこで、boost::regexを利用しました。
Fedoraの場合、boostはyumパッケージで配布されています。
yum install boost boost-devel
で使えるようになります。
注意事項:
yum install boost
でboostパッケージだけをインストールしても、ヘッダーファイルはインストールされません。開発版boost-develのインストールが必要です。開発版boost-develのインストール後に、以下のコマンドでヘッダーが入っていることを確認できます。
find /usr/include/ -name "*boost*"
なお、以下のコマンドで共有ライブラリが入っているかを確認できます。
find /usr/lib/ -name "*boost*"
boost::regexのコンパイル
boost::regexのインクルードは、
#include <boost/regex.hpp>
で行います。
インクルードのためのコンパイルオプションは、デフォルトで/usr/include/にパスが通っているので必要ありません。パスが通っていない場合は、-Iオプション(大文字のアイ)や環境変数CPLUS_INCLUDE_PATHの設定が必要です。
boost::regexを使用するには、ヘッダーファイルのインクルードに加えて共有ライブラリのリンクが必要です。
共有ライブラリのリンクのためのコンパイルオプションは、-Lオプションで探索パスを設定し、-lオプション(小文字のエル)でライブラリを指定します。
boost::regexの場合には、探索パスについては/usr/lib/にパスが通っているので必要ありません。パスが通っていない場合には、-L/usr/lib/とオプション指定してください。
ライブラリの指定については「-lboost_regex」オプションでできます。
したがって、
g++ -lboost_regex filename.cpp
でコンパイルすることができます。
注意:上記、「-lboost_regex」の「_」が不鮮明なブラウザがありますので、ご注意ください。
共有ライブラリは、-lライブラリ名で指定します。ファイル名にはlib接頭辞が付き、libboost_regex.soがリンクされます。.soは共有ライブラリの拡張子です。共有ライブラリについて、詳しくは下記の参考サイトを参照してください。
参考サイト
Are the boost headers separately packaged under Fedora?, Unix & Linux Stack Exchange, 2012
letsboost::インストール, Let’s Boost, Kazuhiro Inaba
第 16 章 ライブラリの構築, Sun Studio 12: C++ ユーザーズガイド, ORACLE, 2010年
Linux 動的ライブラリーの徹底調査, M. Tim Jones, IBM Developer Works, 2008年8月20日
Linux共有ライブラリの簡単なまとめ, wagavulinの日記, 2009年10月26日