在Windows上生成支持VS的OpenSSL是相當簡單,但簡單地事情卻又蜿蜒曲折,我將會在此寫下這曲折經歷,將來的實驗當中才能減少傷痛。
(來外說話真有情調啊)
你需要安裝:
VS2010(這個將會最大可能地與老版本兼容)
ActivePerl【1】
最新版的 OpenSSL source-code【2】
解壓【3】OpenSSL源碼到兩個文件夾,一個用於32位生成,一個用於64位【4】。比如,可以解壓到C:openssl-src-32 和 C:openssl-src-64 目錄下。
1、打開Visual Studio 命令提示符 (2010)【5】
2、CD命令進入32位源碼目錄(比如:cd C:openssl-src-32).
3、執行如下命令:【6】
perl Configure VC-WIN32 --prefix=C:Build-OpenSSL-VC-32 msdo_ms nmake -f ms t.mak nmake -f ms t.mak install最終將生成在C:Build-OpenSSL-VC-32.目錄
這些步驟將會直接嵌入調試標識到lib文件中。不要期望看到任何pdb文件。
1、同上打開命令提示符
2、同上cd進源碼目錄(還是 C:openssl-src-32)
3、執行如下命令:
perl Configure debug-VC-WIN32 --prefix=C:Build-OpenSSL-VC-32-dbg msdo_ms4、在類似notepad的文本編輯器中打開ms t.mak文件並將其中所有的/Zi替換成/Z7。將會有三個被替換。【7】
5、執行如下命令:
nmake -f ms t.mak nmake -f ms t.mak install最終生成在目錄C:Build-OpenSSL-VC-32-dbg。並將某些文件改成如下名字:libeay32-debug.lib 和ssleay32-debug.lib
1、打開VisualStudio x64 命令提示符(在開始菜單中找)
2、cd進OpenSSL的64位源碼文件夾 (e.g. cd C:openssl-src-64)
3、執行命令:
perl Configure VC-WIN64A --prefix=C:Build-OpenSSL-VC-64 msdo_win64a nmake -f ms t.mak nmake -f ms t.mak install這將輸出在C:Build-OpenSSL-VC-64目錄
注意:這次輸出的名字還是叫libeay32.lib 和 ssleay32.lib。你必須自行將名字改成對應的名字(避免混淆)。
這些步驟將會直接嵌入調試標識到lib文件中。不要期望看到任何pdb文件。
1、打開VisualStudio x64 命令提示符
2、cd進OpenSSL的64位源碼文件夾 (e.g. cd C:openssl-src-64)
3、執行命令:
perl Configure debug-VC-WIN64A --prefix=C:Build-OpenSSL-VC-64-dbg msdo_win64a4、在文本編輯器中同上編輯那個文件,除了以ASM開頭的那一行,共有兩次替換。【8】
5、執行命令:
nmake -f ms t.mak nmake -f ms t.mak install這將輸出在這個目錄下:C:Build-OpenSSL-VC-64-dbg。同事名字也要改成這樣的:libeay64-debug.lib 和ssleay64-debug.lib.
我在sun下嘗試了每一種可以鏈接到VS工程的方法來獲取OpenSSL的windows生成。在這條路上我學到了很多。這些就是我知道的不要去做的事情:
-不要盲目遵循OpenSSL源碼目錄下給出的WIN32/64安裝指令。到網上找指南。
-不要在Cygwin中生成OpenSSL。這雖然簡單,但是最終不能成功鏈接到VS。
-不要在MSYS和MinGW中建立OpenSSL。這很困難,而且也不能成功鏈接到VS。
-不要使用Windows安裝指令做提到的NASM,這對VS的Build來說沒有必要。(無論怎麼說它只支持32位的。)
-Strawberry Perl在這些奇葩的配置中並不總是有效。ActivePerl似乎更穩定。
-不要在相同的目錄裡建立32位和64位OpenSSL。第一個生成操作將會在目錄中留下些遺物,這些將會攪亂第二個生成操作。(很明顯的是,執行一個clean是遠遠不夠的。)
-不要嘗試在VS 64位命令提示符裡建立32位OpenSSL,反之亦然。這將不會有任何效果。
以下將是非常有用的網址:
https://github.com/freelan-developers/freelan-buildtools/blob/master/INSTALL.md
【1】、不要使用Strawberry Perl(可以看post來的評論)。
【2】、OpenSSL version 1.0.1c是寫這篇文章時的最新版本。
【3】、7-zip可以很好地在Windows解壓縮.tar.gz文件。這是一個兩步處理過程。
【4】、OpenSSL的生成腳本對於在一個隊列中處理兩個平台下的build不夠智能。不同平台的生成必須從頭開始。
【5】、你可以在開始菜單的某個地方找他它。
【6】、使用ms\ntdll.mak反而會生成共享庫。
【7】、/Zi選項雖然有用,但是不指定更多的選項將很難找到正確的.pdb文件。簡單地說,/Z7選項僅僅是將所有的調試標識嵌入到lib文件。到這裡看更多細節。
【8】、為了生成64位版本,VS使用MASM(ml64.exe)來編譯程序集代碼。根據MASM’s documentation,/Z7選項是不被支持的。