POCO (POrtable COmponents) は Boost と同様に有用な C++ のクラスライブラリです。簡単に使用方法を記載します。Boost Software License で配布されていますが Boost への明示的な依存はなく単体で動作します。
A Guided Tour Of The POCO C++ Libraries
Poco::Any class (based on boost::Any)
とあることから poco のバイナリをビルドする際に boost のバイナリが静的にリンクされているのかもしれません。
こちらから選択します。すべてソースコードであり後にビルドが必要です。今回は Basic Edition を利用します。GCC でビルドするため "Sources for Linux, OS X, etc." を選択します。
事前に gcc-c++ などをインストールしてから以下のコマンドを実行します。
$ tar zxvf poco-1.6.0.tar.gz
$ cd poco-1.6.0/
$ ./configure
$ make
$ sudo make install
既定では以下の場所にインストールされます。
いくつか方法がありますが Linux の場合とビルド環境を近づけるために 3 番目の「Cygwin の GCC でビルド」を採用します。
こちらを参考に CDT プラグインを利用して C++/実行可能/空プロジェクトを作成します。ツールチェーンには Cygwin GCC を選択します。
ダウンロードしたソースコードをプロジェクトのエクスプローラ内にドラッグアンドドロップしてコピーします。Cygwin Terminal で以下のコマンドを実行します。make install は実行しません。CPU のコアが複数個ある場合は make -j4 で Job 数を増やすことで並列化できるため高速にビルドできます。プロジェクトによっては並列ビルドすると不具合が発生することがありますが Poco プロジェクトについては問題なくビルドできます。
$ cd /path/to/workspace/プロジェクト名
$ tar zxvf poco-1.6.0.tar.gz
$ cd poco-1.6.0/
$ ./configure
Configured for CYGWIN
$ make
(or $make -j4)
Eclipse のエクスプローラ内で F5 を押すなどしてリフレッシュすると展開およびビルドしたファイルが認識されます。poco-1.6.0 のフォルダを右クリックして「リソース構成」→「ビルドから除外」→「Debug,Release」→「OK」としておきます。
インクルードパス
「プロジェクトのプロパティ」→「C/C++ 一般」→「パスおよびシンボル」→「インクルード」→「追加」→「ワークスペース /poco/poco-1.6.0/Foundation/include (ライブラリーが増える度に適宜追加)」→「すべての構成に追加 (Debug,Release)」→「すべての言語に追加 (GNUC,GNUC++,アセンブリー)」→「OK」
ライブラリーパス
「プロジェクトのプロパティ」→「C/C++ 一般」→「パスおよびシンボル」→「ライブラリーパス」→「追加」→「ワークスペース /poco/poco-1.6.0/lib/CYGWIN/i686」→「すべての構成に追加 (Debug,Release)」→「OK」
ライブラリーの追加
「プロジェクトのプロパティ」→「C/C++ 一般」→「パスおよびシンボル」→「ライブラリ」→「追加」→「PocoFoundation と入力 (後述の -l オプションに相当、使用ライブラリーが増える度に適宜追加します)」→「すべての構成に追加 (Debug,Release)」→「OK」
以上の設定でビルドまでは成功しますが、バイナリを実行すると失敗します。Eclipse 上ではエラーなく失敗するため気付きにくいですが Cygwin Terminal で実行すると原因が判明します。
$ ./poco.exe
/cygdrive/c/Users/username/workspace/poco/Debug/poco.exe: error while loading shared libraries:
cygPocoFoundation.30.dll: cannot open shared object file: No such file or directory
DLL が見つからないためエラーが出ています。後述の通り Linux 環境では LD_LIBRARY_PATH
にパスを追加すればよいのですが Windows では PATH
環境変数に DLL へのパスを追加します。
「プロジェクトのプロパティ」→「実行/デバッグ設定」→「新規 (または "プロジェクト名.exe" が既にあればそれを編集)」→「C/C++ Application」→「OK」→「環境」→「選択」→「Path,PATH,path など OS の環境変数を選択」→「OK」→「選択して編集」→「先頭に DLL へのパスをセミコロン区切りで追記 (例: c:/Users/username/workspace/プロジェクト名/poco-1.6.0/lib/CYGWIN/i686)」→「ネイティブ環境を指定の環境と置換 (OS の環境変数を実行時に上書きます)」→「OK」→「OK」
以下の正規表現のソースコードをビルドおよび実行してみましょう。
Poco/RegularExpression の使用例です。
sample.cpp
#include <iostream>
#include <Poco/RegularExpression.h>
int main() {
Poco::RegularExpression regexp("^[a-zA-Z]+");
std::string buf;
regexp.extract("ABC123", buf);
std::cout << buf << std::endl; //=> ABC
return 0;
}
ビルド例
$ g++ -I/usr/local/include -L/usr/local/lib -lPocoFoundation sample.cpp
実行例
$ env LD_LIBRARY_PATH=/usr/local/lib ./a.out
ABC