モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

POCO C++ Libraries の簡単な使用方法

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/05/17
最終更新最終更新
2021/09/07
記事区分記事区分
一般公開

目次

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

    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." を選択します。

    Linux の場合

    事前に gcc-c++ などをインストールしてから以下のコマンドを実行します。

    $ tar zxvf poco-1.6.0.tar.gz
    $ cd poco-1.6.0/
    $ ./configure
    $ make
    $ sudo make install
    

    既定では以下の場所にインストールされます。

    • /usr/local/include/Poco/* (ヘッダーファイル)
    • /usr/local/lib/libPoco*.so (動的リンク用ライブラリ SharedObject)

    Windows の場合

    いくつか方法がありますが Linux の場合とビルド環境を近づけるために 3 番目の「Cygwin の GCC でビルド」を採用します。

    • "Sources for Windows" をダウンロードして Visual Studio でビルド
    • Cygwin Poco パッケージをマネージャからダウンロードしてそのまま利用
    • "Sources for Linux, OS X, etc." を Cygwin の GCC でビルド (Cygwin の Poco パッケージはインストール済みであればアンインストール)

    Eclipse のプロジェクトを作成

    CDT プラグインを利用して C++/実行可能/空プロジェクトを作成します。ツールチェーンには Cygwin GCC を選択します。

    ソースコードの解凍および Poco のビルド

    ダウンロードしたソースコードをプロジェクトのエクスプローラ内にドラッグアンドドロップしてコピーします。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」

    実行

    以下の正規表現のソースコードをビルドおよび実行してみましょう。

    • 「エクスプローラを右クリック」→「新規」→「ソース・フォルダー」→「フォルダ名 src」→「完了」
    • 「エクスプローラを右クリック」→「新規」→「ソース・ファイル」→「ソース・ファイル名 Main.cpp」→「完了」
    • 実行時の構成を先程設定した項目 "プロジェクト名.exe" で実行

    正規表現 (動作検証を兼ねて)

    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
    

    Base64 エンコーディング/デコーディング

    Poco/Base64Encoder および Poco/Base64Decoder の使用例です。stringstream は istream と ostream を多重継承しているため Encoder/Decoder 両方で使用可能です。

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <Poco/Base64Encoder.h>
    #include <Poco/Base64Decoder.h>
    using namespace std;
    
    int main() {
        stringstream ss;
        ss.str(""); // 初期化
    
        Poco::Base64Encoder enc(ss); // cout のように使用
        enc << "ABCDEFG";
        enc.close();
        cout << ss.str() << endl; //=> QUJDREVGRw==
    
        Poco::Base64Decoder dec(ss); // cin のように使用
        string str;
        dec >> str;
        cout << str << endl; //=> ABCDEFG
    
        return 0;
    }
    

    日付関連

    Poco/DateTime の使用例です。

    #include <iostream>
    #include <cstdio>
    #include <Poco/DateTime.h>
    using namespace std;
    
    int main() {
        Poco::DateTime now;
        printf("%d/%02d/%02d\n", now.year(), now.month(), now.day()); //=> 2015/05/16
        return 0;
    }
    

    その他

    ドキュメントについて

    C/C++ ライブラリにはよくあることですが、オンラインの公式ドキュメントは充実しておらず、ビルド時にダウンロードしたパッケージにサンプルコードやドキュメントが含まれています。

    $ find . -name 'doc'
    ./CppUnit/doc
    ./Data/doc
    ./doc
    ./NetSSL_OpenSSL/doc
    ./PageCompiler/doc
    ./Zip/doc
    
    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事