« プレイヤンミクロ(BlogPet) | トップページ | 最新WebサービスAPIエクスプローラ ~Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略 »
2005.09.12
OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法
以前の版(0.9.7e)の OpenSSL を Visual C++ 6 でビルドしたときに手順をメモっておくのを忘れてました。今後のことを考えて、今回の作業内容をメモっておきます。たぶん、パッケージ構成が大きく変わらない限りは同様の手順でいけると思います。
手順
(1) まず、http://www.slproweb.com/products/Win32OpenSSL.html から、Windows 用のバイナリを取ってきてインストールします(万一、Windows 用のバイナリ配布サイトが変わっていた場合でも、OpenSSL の Binary Distributions のページの OpenSSL for Windows から辿れます)。
(2) 次に OpenSSL のソースの最新版を持ってきて、展開します。
(3) 展開後、 INSTALL.W32 に書かれている手順で dll を作成します。すなわち、以下を実行します(perl が必要です)。
- perl Configure VC-WIN32
- ms\do_ms
- nmake -f ms\ntdll.mak
(4) できあがった dll を念のためにテストします。
- cd out32dll
- ..\ms\test
(5) スタティックライブラリバージョンを作成します。リリースビルド版はバイナリパッケージインストール時に展開される C:\OpenSSL\lib\VC\static 以下にあるファイルを使えば OK(C:\OpenSSLにインストールした場合)。問題は、デバッグビルド版。これは自分でビルドする必要があります。
- まず、ms\nt.mak を元に ms\nt_debug.mk を作ります。
ms\nt.mak に対する unified diff を示しておきます。これを参考に ms\nt_debug.mk を作ってください。
--- nt.mak Mon Sep 12 20:20:18 2005 +++ nt_debug.mak Mon Sep 12 20:57:02 2005 @@ -16,7 +16,7 @@ # Set your compiler options PLATFORM=VC-WIN32 CC=cl -CFLAG= /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 /Fdout32 -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 +CFLAG= /MDd /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 /Fdout32 -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 APP_CFLAG= LIB_CFLAG= SHLIB_CFLAG= @@ -28,6 +28,7 @@ # The OpenSSL directory SRC_D=. +SRC_WIN32_D=.\ms LINK=link LFLAGS=/nologo /subsystem:console /machine:I386 /opt:ref @@ -55,9 +56,9 @@ RMD160_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 @@ -75,8 +76,8 @@ ###################################################### E_EXE=openssl -SSL=ssleay32 -CRYPTO=libeay32 +SSL=ssleay32d +CRYPTO=libeay32d # BIN_D - Binary output directory # TEST_D - Binary test file output directory @@ -367,7 +368,8 @@ $(OBJ_D)\str_mem.obj $(OBJ_D)\pqueue.obj $(OBJ_D)\e_4758cca.obj \ $(OBJ_D)\e_aep.obj $(OBJ_D)\e_atalla.obj $(OBJ_D)\e_cswift.obj \ $(OBJ_D)\e_gmp.obj $(OBJ_D)\e_chil.obj $(OBJ_D)\e_nuron.obj \ - $(OBJ_D)\e_sureware.obj $(OBJ_D)\e_ubsec.obj + $(OBJ_D)\e_sureware.obj $(OBJ_D)\e_ubsec.obj \ + $(OBJ_D)\ftol2.obj T_EXE=$(TEST_D)\md2test.exe \ $(TEST_D)\md4test.exe $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe \ @@ -815,6 +817,9 @@ $(INCO_D)\kssl.h: $(SRC_D)\ssl\kssl.h $(CP) $(SRC_D)\ssl\kssl.h $(INCO_D)\kssl.h + +$(OBJ_D)\ftol2.obj: $(SRC_WIN32_D)\ftol2.c + $(CC) /Fo$(OBJ_D)\ftol2.obj $(LIB_CFLAGS) -c $(SRC_WIN32_D)\ftol2.c $(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
- 次に ms\ftol2.c というファイルを用意します。例えば、以下のような内容で OK。
// only for MSDEV 6.0 //#if (_MSC_VER == 1200) && (WINVER < 0x0500) # ifdef __cplusplus extern "C" { # endif long _ftol( double ); // defined by VC6 C libs # ifdef cplusplus } # endif # ifdef __cplusplus extern "C" { # endif long _ftol2( double dblSource ) { return _ftol( dblSource ); } # ifdef cplusplus } # endif //#endif
どうして ftol2.c を用意するのかというと、リンク時に _ftol2() が見つからないというエラーが出るから。Visual C++ 6 には _ftol2() がないので、_ftol() で代用します。Visual Studio.NET や Visual Studio 2005 (Express を含む)には、例えば
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\dll_lib
に、ftol2.obj があるので、それをリンクするようにしても構いません。 その場合は、それに合わせて ms\nt_debug.mk も書き換えておいてください。 この辺(自前の _ftol2() を用意する必要がある)は、オリジナルが gcc 前提で書かれているオープンソースなプログラム共通だと覚えておいてください(ただし、リンクエラーが出ないときは ftol2() を用意する必要はありません)。
(6) あとはビルドを実行するだけ。INSTALL.W32 の手順の
> nmake -f ms\ntdll.mak
を
> nmake -f ms\nt_debug.mak
に読み替えて実行します。
以上で、スタティックライブラリバージョンのデバッグビルド版が out32_debug ディレクトリの下にできているはずです。
書いてみると結構複雑なことをしているように見えますが、たいしたことはやっていません。自前の _ftol2() を用意することと、ms\nt_debug.mak を用意することが肝要。それ以外は流れ作業です。
なお、ms\nt.mak を使って、スタティックライブラリバージョンのリリースビルド版を作るときも、自前の _ftol2() を用意し、ms\nt.mak を書き換えてからビルドすることになります。
追記
以下、2006年8月20日に追記。
いつの間にか(0.98b から?)、「Windows 用のバイナリパッケージ」には、デバッグビルド版のスタティックライブラリも同梱されてますね。しかも、マルチスレッドDLLデバッグ版(MDd)と、マルチスレッドデバッグ版(MTd)の両方。もはや、自分でビルドする必要がなくなりました。
それでも、やっぱり、0.98b も一度は自分でビルドしてみたい、と思ってビルドを試みてみました。
VC++ 8 (Visual Studio 2005) の cl.exe だとコンパイルエラーが出ます。VC++ 8 でビルドできるようにしようとするのは、結構な作業量が必要かも。Visual Studio.NET 2003 な VC++ では試してないけど、たぶんコンパイルエラーが出ると思います。 ということで、自分でビルドするには、依然として VC++ 6 が必要なようです。
投稿者: tsupo 2005.09.12 午後 10:49
| 固定リンク
|
|
|
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法:
» OpenSSL 0.9.8 の Win32 環境用ライブラリを自力でビルドする方法 (続) from 観測気球
ここ最近の OpenSSL の Windows 向けバイナリパッケージは VC6 では使えなくなってしまったので、VC6 でも使えるライブラリを作ってみました。 続きを読む