L&M個別オンライン教室~論理と数学とプログラミングのオンライン授業~L&M個別オンライン教室~論理と数学とプログラミングのオンライン授業~L&M個別オンライン教室~論理と数学とプログラミングのオンライン授業~

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日