標籤:visualstudio openssl windows perl
博主親測有效。
轉載請註明出處:http://blog.csdn.net/xiaoy_h/article/details/36444013
原英文文章:http://developer.covenanteyes.com/building-openssl-for-visual-studio/
譯文:
在Windows上產生支援VS的OpenSSL是相當簡單,但簡單地事情卻又蜿蜒曲折,我將會在此寫下這曲折經曆,將來的實驗當中才能減少傷痛。
(來外說話真有情調啊)
你需要做什嗎?
你需要安裝:
VS2010(這個將會最大可能地與老版本相容)
ActivePerl【1】
最新版的 OpenSSL source-code【2】
組建組態
解壓【3】OpenSSL源碼到兩個檔案夾,一個用於32位產生,一個用於64位【4】。比如,可以解壓到C:\openssl-src-32 和 C:\openssl-src-64 目錄下。
產生32位靜態庫
1、開啟Visual Studio 命令提示字元 (2010)【5】
2、CD命令進入32位源碼目錄(比如:cd C:\openssl-src-32).
3、執行如下命令:【6】
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32ms\do_msnmake -f ms\nt.mak nmake -f ms\nt.mak install
最終將產生在C:\Build-OpenSSL-VC-32.目錄
產生32位調試版本靜態庫
這些步驟將會直接嵌入調試標識到lib檔案中。不要期望看到任何pdb檔案。
1、同上開啟命令提示字元
2、同上cd進源碼目錄(還是 C:\openssl-src-32)
3、執行如下命令:
perl Configure debug-VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32-dbgms\do_ms
4、在類似notepad的文字編輯器中開啟ms\nt.mak檔案並將其中所有的/Zi替換成/Z7。將會有三個被替換。【7】
5、執行如下命令:
nmake -f ms\nt.maknmake -f ms\nt.mak install
最終產生在目錄C:\Build-OpenSSL-VC-32-dbg。並將某些檔案改成如下名字:libeay32-debug.lib 和ssleay32-debug.lib
產生64位靜態庫
1、開啟VisualStudio x64 命令提示字元(在開始菜單中找)
2、cd進OpenSSL的64位源碼檔案夾 (e.g. cd C:\openssl-src-64)
3、執行命令:
perl Configure VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64ms\do_win64anmake -f ms\nt.maknmake -f ms\nt.mak install
這將輸出在C:\Build-OpenSSL-VC-64目錄
注意:這次輸出的名字還是叫libeay32.lib 和 ssleay32.lib。你必須自行將名字改成對應的名字(避免混淆)。
產生帶調試符的64位靜態庫
這些步驟將會直接嵌入調試標識到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-dbgms\do_win64a
4、在文字編輯器中同上編輯那個檔案,除了以ASM開頭的那一行,共有兩次替換。【8】
5、執行命令:
nmake -f ms\nt.maknmake -f ms\nt.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選項是不被支援的。