CPPCMSライブラリのWindowsでの使用


タイトル:CPPCMSライブラリのWindowsでの使用
時間:2012-7
作者:Kagula
環境:
[1]WinXP SP3
[2]VisualStudio2008 SP1
[3]ZLib 1.2.7
[4]PCRE 8.31
[5]Python 2.7.3
ステップ1:コンパイル環境の構成
ZLibライブラリ
[1−1]VS 2008コマンドラインモードを行う(特に説明がない場合、全てのコマンドがこのモードで実行される)
[1-2]zlibライブラリ1.2.7 e:sdkへのダウンロードと解凍
[1−3]に進む
E:\SDK\zlib-1.2.7win 32ディレクトリの下、次のコマンドを実行し、INSTALLを生成する.vcprojファイル
cmake .. -G"Visual Studio 9 2008"
参考にcmakeコマンドを呼び出さないと使用ヘルプが印刷されます.
[1-4]
VS 2008を使用してALL_を開くBUILD.vcprojファイルのコンパイルにunistdが表示されます.hファイルの末尾が間違っているので、ファイルの最後に折り返し改行を加えてコンパイルすればいいです.
デフォルトのコンパイルオプションはMinSizeRel(生成されたファイルサイズの最適化&リリースコンパイルモード)です.
E:SDKzlib-1.2.7win 32MinSizeRelフォルダの下には、対応するlibとdllファイルを生成し、テスト用のexeファイルがあります.
PCREライブラリ
[2-1]下記URLにて
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.31.zip
PCREソースパッケージを「E:SDKpcre-8.31」パスの下にダウンロードして解凍する
[2−2]次のコマンドを実行してALL_を生成するBUILD.vcprojファイル、ダブルクリックして開き、VS 2008でBUILD!
E:\SDK\pcre-8.31>cmake -G"Visual Studio 9 2008"
[2-3]MinSizeRelでコンパイルされた場合
自動的に作成されます
E:SDKpcre-8.31MinSizeRelディレクトリを作成し、このディレクトリにDLL、LIB、EXEなどのファイルを生成します.
Python
[3]Winの下にPython 2をインストール.7.3
私はC:Python 27パスの下にインストールして、このパスをPath環境変数に追加しました.
ICU(複数言語サポート、オプション)
[4]下記アドレス
http://download.icu-project.org/files/icu4c/49.1.2/icu4c-49_1_2-Win32-msvc10.zip
E:SDKディレクトリへのダウンロードと解凍
悲劇は、Visual Studio 2010のみをサポートします.
OpenSSL1.0.1(オプション)
[5]このライブラリをどのようにダウンロードしてコンパイルするか、ネット上の関連ドキュメントを参考にして、ここは怠け者で書いた.
ステップ2:CPPCMSのコンパイル
[1]
E:\SDK\pcre-8.31;E:\SDK\zlib-1.2.7
[2]E:SDKcppcms-1.0に入る.1ディレクトリで、次のコマンドを実行します.
E:\SDK\pcre-8.31>cmake -G"Visual Studio 9 2008"-DCMAKE_INCLUDE_PATH=E:\SDK\pcre-8.31;E:\SDK\zlib-1.2.7 -DCMAKE_LIBRARY_PATH=E:\SDK\pcre-8.31\MinSizeRel;E:\SDK\zlib-1.2.7\win32\MinSizeRel
注意、上は読みやすいように1行の内容breakを3行にしていますが、実際にコマンドを入力するのは1行です.
[3]
ALL_を生成BUILD.vcproj、ダブルクリックして開きます.MinSizeRel方式コンパイル(最小ファイルを生成するReleaseバージョン)
boosterエンジニアリングをコンパイルする場合は、[Configuration Properties]->「[C/C+]->「[preprocessor]->「[preprocessor Definitions]に追加する必要があります.
PCRE_STATICマクロ、それ以外の場合pcre_free関数の実装は見つからないので、参考資料[1].
cppcmsプロジェクトをコンパイルする前にzlibを修正する.hファイル、
元の"#include"zconf.h"コードセグメントを"#include"win 32zconf.h"コードセグメントに変更します.
そしてコンパイルSolutionですべてのプロジェクトを通過します.
CPPCMS依存ライブラリのヘッダファイルとライブラリファイルの場所を変更した場合は、cmakeコマンドでvcprojファイルを再生成し、コンパイルします.
これにより、コンパイルオプションを手動で変更するよりも便利になります.
ステップ3:私の最初のCPPCMSプログラム
[1]
VS 2008で以下の項目を構成する
ヘッダファイルパスの設定
E:\SDK\cppcms-1.0.1
E:\SDK\cppcms-1.0.1\booster
依存ライブラリファイルパスの設定
----------------------------------------------
Releaseバージョンの
E:\SDK\cppcms-1.0.1\MinSizeRel
----------------------------------------------
Debugバージョン(デフォルト)
E:\SDK\cppcms-1.0.1\Debug
----------------------------------------------
[2]VS 2008でC++のWin 32 Consoleプロジェクトを新規作成
リンクライブラリ依存項目に「cppcms.lib」を追加
[3]参考資料[2]中コード新規次のコード
#include   
#include 

using namespace std;
	class response {
	public: 
		//0 is ok
		//other values are wrong
		int status;
		string message;
	};
	
namespace cppcms {
	namespace json {
		template<>
		struct traits {
			static void set(value &v, response const& in) {
				v.set("status", in.status);
				v.set("message", in.message);
			}
		};
	}
}  

int main(int argc, char** argv) {
	response r1;
	r1.status=0;
	r1.message="ok";
	cout<< cppcms::json::value(r1)<

[4]
次のパスのファイルを現在のプロジェクトパスにコピーします.
----------------------------------------------
MiniSizeRelバージョンの
E:\SDK\cppcms-1.0.1\booster\MinSizeRel\booster.dll
E:\SDK\zlib-1.2.7\win32\MinSizeRel\zlib.dll
E:\SDK\cppcms-1.0.1\MinSizeRel\cppcms.dll
----------------------------------------------
Debugバージョン(デフォルト)
E:\SDK\zlib-1.2.7\win32\Debug\zlibd.dll
E:\SDK\cppcms-1.0.1\booster\Debug\boost.dll
E:\SDK\cppcms-1.0.1\Debug\cppcms.dll
----------------------------------------------
[5]参考資料[2]のコードはプロジェクトを確立し、Releaseの下で正常に動作する.
ただしDebugモードではコンパイルはできますが、正常に動作しません.
一般的にデバッグを容易にするために、DEBUG方式でプログラムを実行するので、各サードパーティライブラリのDEBUGバージョンをコンパイルする必要があります.
[6]デフォルトではcppcmsサードパーティライブラリによるDebugとReleaseバージョンの切り替えが不便
[6-1]boosterライブラリのデバッグコンパイルオプションの変更
[コンフィギュレーションプロパティ]->「Linker」->「General」->「Output File」->「元のbooster.dllをboosterd.dllに変更」
[コンフィギュレーションプロパティ]->「Linker」->「Advanced」->「Import Library」->「元booster.libからboosterd.libに変更」
[6-2]cppcmsプロジェクトのDebugコンパイルオプションの変更
[コンフィギュレーションプロパティ]->「Linker」->「Input」->「Additional Dependencies」->「元booster.libからboosterd.libに変更」
[原E:SDKzlib-1.2.7win 32MinSizeRelzlib.libをE:SDKzlib-1.2.7win 32Debugzlibd.libに変更]
[原E:SDKpcre-8.31MinSizeRelpcre.libをE:SDKpcre-8.31MinSizeRelpcred.libに変更]
[Configuration Properties]->[Linker]->[General]->[Output File]->[cppcmsd.dll]
[Configuration Properties]->[Linker]->[Advanced]->[Import Library]->[cppcmsd.lib]
----------------------------------------------------------------------------------------
これにより、DEBUG方式のLIBパスをVS 2008に組み込むことができ、元のパスと衝突しない.
DEBUG方式のDLLファイルを現在のプロジェクトフォルダにコピーしても、Release方式のDLLを上書きすることなく開発が容易になりました.
----------------------------------------------------------------------------------------
その後、DebugバージョンのDLLは、EXE(Debugモード)によって見つかる前のレベル(Solutionレベル)のDebugディレクトリに格納されていることがわかりました.
しかし、ReleaseバージョンのDLLファイルは現在のプロジェクトに置くだけです.vcprojファイルがあるディレクトリでいいので、悩まないで.......
Debugモードで依存ライブラリをcppcmsdに設定.libは参考資料[2]のコードを正常に走ることができます.
[7]cppcmsプロジェクトが持参したjsonの例を参考にして、深く学習する.
参考資料
[1]PCRE_free見つからない問題
http://forums.codeblocks.org/index.php?topic=9577.0
[2]『C++シーケンス化と逆シーケンス化』
http://www.cnblogs.com/fengye-dream/archive/2012/03/21/2409964.html
[3]『cppcms公式サイト』
http://cppcms.com/wikipp/en/page/main