smailの64ビット版作成の前にopenssl の64ビット版のライブラリーを作成しないといけないということで、openssl の64ビット版のライブラリーを作成。(自分用メモ)
http://www.openssl.org/source/から、最新ソースコードopenssl-1.0.0e.tar.gzをダウンロードして、
C:workvcfreeopenssl-1.0.0e-64に展開
1)コンパイル環境の設定
C:workvcfreeopenssl-1.0.0e-64>”C:Program Files (x86)Microsoft Visual Studio 10.0VCbinx86_amd64vcvarsx86_amd64.bat”
Setting environment for using Microsoft Visual Studio 2010 x64 cross tools.
※32bitを作成する場合は、C:Program Files (x86)Microsoft Visual Studio 10.0VCbinvcvars32.bat”
を実行する。
2)Configure (要ActivePerl,要make)
C:workvcfreeopenssl-1.0.0e-64>perl Configure VC-WIN64A no-asm --prefix=C:workvcfreeopenssl-1.0.0e-64
※アセンブラ(MASM)があれば、no-asmを外すと、SHA等の計算はアセンブラーコードを使用され速度が速くなります。
まあ、そんなに高速を必要としないので、私はいつも、no-asmを指定。
3)makeファイル作成
C:workvcfreeopenssl-1.0.0e-64>msdo_win64a
C:workvcfreeopenssl-1.0.0e-64>perl utilmkfiles.pl 1>MINFO
C:workvcfreeopenssl-1.0.0e-64>perl msuplink.pl win64a 1>msuptable.asm
C:workvcfreeopenssl-1.0.0e-64>ml64 -c -Fomsuptable.obj msuptable.asm
Microsoft (R) Macro Assembler (x64) Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Assembling: msuptable.asm
C:workvcfreeopenssl-1.0.0e-64>perl utilmk1mf.pl no-asm VC-WIN64A 1>msnt.mak
C:workvcfreeopenssl-1.0.0e-64>perl utilmk1mf.pl dll no-asm VC-WIN64A 1>msntdll.mak
C:workvcfreeopenssl-1.0.0e-64>perl utilmkdef.pl 32 libeay 1>mslibeay32.def
C:workvcfreeopenssl-1.0.0e-64>perl utilmkdef.pl 32 ssleay 1>msssleay32.def
C:workvcfreeopenssl-1.0.0e-64>
3)make
C:workvcfreeopenssl-1.0.0e-64>nmake -f msnt.mak
※smailにSSLを静的リンクライブラリで実装するので、msnt.makを実行する。
DLLを作成したい方は、nmake -f msntdll.makの方を実行する。
4)オブジェクト
C:workvcfreeopenssl-1.0.0e-64out32にssleay32.lib,libeay32.libが生成される。
C:workvcfreeopenssl-1.0.0e-64inc32にopenssl用のインクルードファイルが生成される。
※テストコマンド等も生成される。必要なのは、ssleay32.lib,libeay32.libだけですが、本当に64bitで動作しているのか、openssl.exeを起動して、タスクマネージャで見てみる。
以上で、openssl 64bit版のライブラリーの出来上がりです。
5)SMAILを64bit化する。(64ビットアプリは未公開です。)
・64bit化のため、一部ソースコード修正
・4)で作成した、includeファイル、ライブラリーを指定。
・コンパイル
64bit版のsmail.exe完成、64bitで動作しているか確認。
※正常にSSLでメール送信。
opensslを使ってSSL通信するプログラムは至って簡単で、sslの初期化をしてしまえば、後はソケットディスクリプタをSSLに通すだけです。