OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法 (続)

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] ここ最近の OpenSSL の Windows 向けバイナリパッケージは VC6 では使えなくなってしまったので、VC6 でも使えるライブラリを作ってみました。
[キーワード] OpenSSL,Visual C++,ライブラリ

« 2009年 3月21日の暦 (2009/03/21)(BlogPet) | トップページ | 03月29日のココロ日記(BlogPet) »

2009.03.29

OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法 (続)

いつの間にか(0.98b から?)、「Windows 用のバイナリパッケージ」には、デバッグビルド版のスタティックライブラリも同梱されてますね。しかも、マルチスレッドDLLデバッグ版(MDd)と、マルチスレッドデバッグ版(MTd)の両方。もはや、自分でビルドする必要がなくなりました。

[観] OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法

ということで、ここしばらくの間、自力でビルドする必要はなくなっていたんですが、0.9.8i (か、もうちょっと前のバージョン)辺りから、同梱されているライブラリは VC8 (VC2005) 以降でないとリンクできないものになってしまいました。原因を調べてみたら、最近の OpenSSLWindows 向けバイナリパッケージでは、VC2005 以降で登場したセキュリティ機能強化版のライブラリを使うようにしたから(当該機能の存在しないVC6ではリンクエラーになる)、ということがわかりました。さらに、0.9.8j (以降)は、VC9 (VC2008) でビルドされている関係で、VC8 で使おうとすると、OpenSSL を利用しているアプリケーションのビルド時に warning が出たり、リンク時に「ライブラリが壊れています」とか表示されたりする(crypt.obj の形式が VC8 では認識できない形式になっているらしい → 0.9.8i 特有の問題で 0.9.8j では発生しなくなっている)ようになってしまいました。

VC6 でビルドしたライブラリなら VC7、VC8、VC9 でもそのまま使えるので、いっそのこと、VC6 でビルドしたライブラリを作って、それを使うようにすることで、当座の問題を回避することにしてみました。というか、Windows 2000 以前でも動作保障できるアプリケーションをビルドしようとすると、なんのかんのいいつつ、結局 VC6 を使うことになるので、VC6 で利用可能な OpenSSL ライブラリの需要はあるんですよね。

ってなことで、VC6 で OpenSSL 0.9.8k のライブラリをビルドできるようにしてみました。0.9.8k は、まだ最近(2009年3月25日)出たばかりの最新版です。

以下、OpenSSL 0.9.8k のリリースビルド版スタティックリンクライブラリの makefile (nt.mak) と、この makefile を基に作成したデバッグビルド版スタティックリンクライブラリの makefile (nt_debug.mak) の差分(unified diff)です。同じようにリリースビルド版ダイナミックリンクライブラリの makefile を元に、デバッグビルド版ダイナミックリンクライブラリの makefile も作れます。

--- nt.mak	Sat Mar 28 22:22:00 2009
+++ nt_debug.mak	Sat Mar 28 22:27:08 2009
@@ -16,7 +16,7 @@
 # Set your compiler options
 PLATFORM=VC-WIN32
 CC=cl
-CFLAG= /MT /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_CMS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE    
+CFLAG= /MTd /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_CMS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE    
 APP_CFLAG=
 LIB_CFLAG=/Zl
 SHLIB_CFLAG=
@@ -28,6 +28,7 @@
 
 # The OpenSSL directory
 SRC_D=.
+SRC_WIN32_D=.\ms
 
 LINK=link
 LFLAGS=/nologo /subsystem:console /opt:ref
@@ -60,9 +61,9 @@
 CPUID_ASM_SRC=
 
 # The output directory for everything intersting
-OUT_D=out32
+OUT_D=out32_debug
 # The output directory for all the temporary muck
-TMP_D=tmp32
+TMP_D=tmp32_debug
 # The output directory for the header files
 INC_D=inc32
 INCO_D=inc32\openssl
@@ -92,8 +93,8 @@
 ######################################################
 
 E_EXE=openssl
-SSL=ssleay32
-CRYPTO=libeay32
+SSL=ssleay32d
+CRYPTO=libeay32d
 LIBFIPS=libosslfips
 
 # BIN_D  - Binary output directory

参考用として、OpenSSL の 0.9.8i、0.9.8j、0.9.8k のデバッグビルド版のスタティックリンクライブラリ、ダイナミックリンクライブラリの各 makefile の例(私が実際に使用したもの)を用意しておきます。

なお、この方法で作ったライブラリを使うときは、inc32 というディレクトリ以下にあるインクルードファイルをインクルードするようにしてください。「Windows 向けバイナリパッケージ」の中に入っているインクルードファイル(は VC2005 以降向けになっている)を使うと、VC6 でのビルド時にエラーが発生します。注意してください。

投稿者: tsupo 2009.03.29 午前 12:21 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法 (続):

コメント

ワード

ニッセン

fujisan.co.jp

楽天市場