程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Building OpenSSL for Visual Studio

Building OpenSSL for Visual Studio

編輯:C++入門知識

 

譯文:

在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-32
msdo_ms
nmake -f ms
t.mak 
nmake -f ms
t.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-dbg
msdo_ms
4、在類似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

 

 

生成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-64
msdo_win64a
nmake -f ms
t.mak
nmake -f ms
t.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-dbg
msdo_win64a
4、在文本編輯器中同上編輯那個文件,除了以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選項是不被支持的。

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved