Crypto++ 5.6.1のビルド
POPサーバに接続するためのパスワードを暗号化したいので
Crypto++を導入することにする。
Readme を見る限り、3種類のコンパイルができるらしい。
On Windows, Crypto++ can be compiled into 3 forms: a static library
including all algorithms, a DLL with only FIPS Approved algorithms, and
a static library with only algorithms not in the DLL.
簡単に言えば、
(a) スタティックライブラリ<全部入り>
(b) DLL<一部>
(c) スタティックライブラリ<b以外>
となるだろうか。
以下は、Windows Vista + VC++ 2010 Express環境におけるビルド手順の一例である。
(準備)
1. Crypto++ 5.6.1 をダウンロードし、適当な場所へ展開。
(ここでは「E:\lib\cryptopp」とする)
2. 最新の Microsoft Windows SDK をインストール
http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx
※VC++ Express Edition(+Vista?) だとヘッダファイルが足りない模様なので追加する(※1)
3. winres.h を参照可能な場所へコピー
サンプル用のヘッダファイルをコピー
%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Samples\winui\tsf\tsfapp\winres.h
※とりあえず「E:\lib\cryptopp」直下へ
(ビルド)
1. cryptest.sln を開く
・アプリケーションの選択が出たので 「VC++ Express 10」 を選択
変換処理でいくつか警告が出るも問題なし
※「VC++ Express 2010」では変換エラーとなってしまうので注意
2. 構成を「Debug」-「Win32」にしてソリューション全体をビルド
作成されたファイル:
E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.dll ⇒ (b)
E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.exp
E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.lib ⇒ (c)
E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.mac.done
E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.pdb
E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.exe
E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.exp
E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.ilk
E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.lib
E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.pdb
E:\lib\cryptopp\Win32\DLL_Output\Debug\vc80.pdb
E:\lib\cryptopp\Win32\Output\Debug\cryptest.exe
E:\lib\cryptopp\Win32\Output\Debug\cryptest.ilk
E:\lib\cryptopp\Win32\Output\Debug\cryptest.pdb
E:\lib\cryptopp\Win32\Output\Debug\cryptlib.lib ⇒ (a)
E:\lib\cryptopp\Win32\Output\Debug\vc80.idb
E:\lib\cryptopp\Win32\Output\Debug\vc80.pdb
※lib ファイルを他の場所に移動する場合は、一緒に pdb ファイルも移動しないと
リンカーエラー LNK4099 が出る
3. 同様に「Release」-「Win32」にしてソリューション全体をビルド
作成されたファイル:
E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.dll ⇒ (b)
E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.exp
E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.lib ⇒ (c)
E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.mac.done
E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.pdb
E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.exe
E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.exp
E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.lib
E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.pdb
E:\lib\cryptopp\Win32\DLL_Output\Release\vc80.pdb
E:\lib\cryptopp\Win32\Output\Release\cryptest.exe
E:\lib\cryptopp\Win32\Output\Release\cryptest.pdb
E:\lib\cryptopp\Win32\Output\Release\cryptlib.lib ⇒ (a)
E:\lib\cryptopp\Win32\Output\Release\vc80.pdb
(b) 適当なPATH(環境変数)の通る場所へ保存
(スタティックライブラリとしての利用)
1. 自分のプロジェクトで、プロジェクト - 追加 - 既存の項目から
構成に合わせた場所の「cryptolib.lib」を追加
(E:\lib\cryptopp\Win32\Output\[Debug|Release]\cryptlib.lib)
※#pragma comment によってライブラリの使い分けも可能?
2. オプションの「C++」-「コード生成」-「ランタイム ライブラリ」が
「マルチスレッド(/MT)」か「マルチスレッド デバッグ(/MTd)」であることを確認
(さもなければ、リンカーによる大量のLNK2005エラーに
見舞われることとなる)
3. 使いたいヘッダファイルをインクルード(一例) ※2
#include <cryptopp/aes.h>
#include <cryptopp/dh.h>
#include <cryptopp/modes.h>
#include <cryptopp/osrng.h>
※E:\lib がインクルードディレクトリに設定されている前提
(DLLとしての利用)
1. ライブラリ ディレクトリに「cryptopp.lib」のある場所を追加
(E:\lib\cryptopp\Win32\DLL_Output\[Debug|Release]\cryptopp.lib)
2. dll.h をインクルード
#include <cryptopp/dll.h>
参考:Crypto++R Holds the Key to Encrypting Your C++ Application Data
http://www.codeguru.com/cpp/w-p/win32/security/article.php/c11953
※1 最初に出たエラー
エラー 1 fatal error RC1015: cannot open include file 'winres.h'. e:\lib\cryptopp\cryptopp.rc 10
エラー 2 fatal error LNK1181: 入力ファイル '.\win32\dll_output\debug\cryptopp.lib' を開けません。 dlltest
※2 コンパイルで warning が大量に出るので抑止(それでも#4505が1個でる)
#pragma warning(push)
#pragma warning(disable: 4083 100 127 189 244 505 512 615)
#include <cryptopp/xxxxxxxx.h>
#pragma warning(pop)
0 件のコメント:
コメントを投稿