網上方法很多,大部分是針對32位機的,自己的電腦因為是win7,64位,摸索了很久才安裝成功.
環境
1 WIN7, 64位
2 vs2005
3下載ActivePerl
配置過程中需要產生一些mak檔案,這些產生代碼用perl指令碼產生,所以要安裝一個ActivePerl.
網址:
http://www.activestate.com/activeperl/
我下載了兩個版本:
ActivePerl-5.16.2.1602-MSWin32-x64-296513.msi
ActivePerl-5.16.2.1602-MSWin32-x86-296513.msi
裝的是第一個版本,第二個版本沒裝成功.
4下載openssl
網址 http://www.openssl.org/
我用的是openssl-0.9.8g版本, 沒試過其它版本是否可行.
把openssl-0.9.8g.tar.gz解壓到c盤根目錄.
安裝步驟:
(可以參照openssl目錄下的install.win32)
1開啟命令列
進入openssl源碼目錄。
cd c:/openssl-0.9.8.g
執行perl Configure VC-WIN32
2執行運行ms\do_ms
另外兩種方式如果使用也必須保證本機有編譯器才能使用。
:ms\do_masm(預設vc
內建的編譯器;也也以自己下載安裝)
:ms\do_nasm(需要自己下載)
3
DOS視窗轉到C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin目錄
執行vcvars32.bat以配置環境變數.
4、跳到openssl目錄下,編譯動態連結程式庫
cd c:/openssl-0.9.8.g
執行 >nmake -f ms\ntdll.mak
如果編譯成功,輸出在out32dll目錄下:包括可執行檔、兩個dll和兩個lib檔案:
libeay32.dll, libeay32.lib, ssleay32.dll,ssleay32.lib
這裡要特彆強調一下,這種方法產生的是動庫連結庫, 也就是我們的應用工程如果要使用openssl, 編譯時間要指定
lib檔案,程式發布時要用到相應的dll. 我遇到過一種情況是, 在win7下發布的使用openssl的程式無法運行,彈出
“運行時初始化相關的錯誤”, 但是在xp下編譯,發布,在其它win7和winXP上都能運行. 估計是win7下沒配置好,導致只能原生編譯,運行,無法發布.
如果要把openssl編譯成靜態庫,只要把上面的ntdll.mak換成nt.mak就可以了,我試著用了一個靜態庫,發現要解決很多編譯時間的相容,衝突問題,建議不要使用靜態方法.
(注意雖然是64位win7, 下產生的也是out32dll, 我也不知道為什麼)
建立工程
開啟vs2005,
在additionalinclude directories加上
"C:\openssl-0.9.8g\include"
這個目錄.
在additionallibrary directories加上
"C:\openssl-0.9.8g\out32dll"
這個目錄
代碼類似下面這樣:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<openssl/bn.h>
#include<openssl/ec.h>
#include<openssl/rand.h>
#include<openssl/err.h>
#include<openssl/ecdsa.h>
#include<openssl/ecdh.h>
#include"sm2.h"
#pragmacomment(lib,"libeay32.lib")
編譯不會有問題.同樣在VC6下,把上面兩個目錄包含進來,編譯也通過.