openssl版本:openssl-1.0.2e
在Windows環(huán)境下編譯openssl需要perl支持,安裝ActivePerl
1. 配置編譯環(huán)境
我們用VS2010來作為編譯工具写妥,打開命令行捌蚊,切換到bin目錄,比如
cd C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
vcvars32.bat
2. 配置編譯文件和模式
切換到openssl編譯目錄园担,輸入:
perl Configure debug-VC-WIN32 no-asm --prefix="E:\openssl-1.0.2e\build-debug"
debug-VC-WIN32
表示Windows 32位系統(tǒng)届谈,64位系統(tǒng)請換成debug-VC-WIN64A
Release版本去掉debug, 改為VC-WIN32
或者VC-WIN64A
no-asm
表示不用匯編,不設置此屬性弯汰,會導致編譯不過
3. 生成編譯配置文件
32位
ms\do_ms.bat
64位
ms\do_win64a.bat
執(zhí)行這一步之后艰山,在ms目錄下會生成nt.mak
和ntdll.mak
兩個編譯配置文件
nt.mak
用于生成靜態(tài)lib庫
ntdll.mak
用于生成動態(tài)dll庫
4. 編譯
靜態(tài)庫
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
動態(tài)庫
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
編譯完成之后就可以在build-debug
目錄看到編譯生成的庫了
5. 遇到的錯誤
Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1427) : error A2070: invalid instruction operands
tmp32\sha1-586.asm(1571) : error A2070: invalid instruction operands
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.
出現(xiàn)該問題就是因為在第2步時沒有加上no-asm
屬性
6. 總結和思考
上述方法在32位系統(tǒng)上測試OK,64位雖然原理相同但沒有實際編譯過咏闪。
另外曙搬,64位的編譯選項還有一個VC-WIN64I
,它和VC-WIN64A
有什么區(qū)分還不知道?
參考:
http://developer.covenanteyes.com/building-openssl-for-visual-studio/