工具:
1. 編譯環境win10+vs2015專業版
2. ActivePerl工具,官網下載鏈接:http://www.activestate.com/activeperl/downloads
3. openssl源碼,下載鏈接:https://www.openssl.org/source/,選擇2016-May-03 13:57:13 openssl-1.0.1t.tar.gz這個版本,之所以沒有選擇1.1.0,發覺兩個版本差異較大,ms文件夾下缺少很多文件,沒辦法按照此方法編譯。
步驟:
1. 安裝ActivePerl, 並添加環境變量(可以默認勾選,或者手動添加,如path=d:\perl\bin)。
2. 解壓openssl。
3. 點擊 windows 開始->所有應用->vs2015->開發者命令提示(Developer Command Prompt for 2015)。
4. CD到解壓后的openssl的根目錄。
5. 執行命令:perl Configure debug-VC-WIN32(或者VC-WIN64A,取決於編譯庫類型,可以用–prefix=路徑指定生成路徑).
6. ms\do_ms.bat(創建makefile文件,64位需要使用ms\do_win64a.bat)
7. 執行nmake -f ms\ntdll.mak(編譯動態庫)。
8. 執行nmake -f ms\ntdll.mak test查看庫是否有問題。
9. 執行nmake -f ms\ntdll.mak install 。
TIPs:
編譯動態庫:
nmake -f ms\ntdll.mak
編譯靜態庫:
nmake -f ms\nt.mak
測試動態庫:
nmake -f ms\ntdll.mak test
測試靜態庫:
nmake -f ms\nt.mak test
安裝動態庫:
nmake -f ms\ntdll.mak install
安裝靜態庫:
nmake -f ms\nt.mak install
清除上次動態庫的編譯,以便重新編譯:
nmake -f ms\ntdll.mak clean
清除上次靜態庫的編譯,以便重新編譯:
nmake -f ms\nt.mak clean
- [編譯類型]可以選擇以下:
參數 | 含義 |
---|---|
debug-VC-WIN32 | 編譯32位debug版本 |
VC-WIN32 | 編譯32位release版本 |
debug-VC-WIN64A | 編譯64位debug版本 |
VC-WIN64A | 編譯64位release版本 |
-
[輸出目錄]理論任何地方都可以。自己確定好就行
-
-
3)配置模式:
-
【編譯32位openssl】
命令如下:ms\do_ms.bat
- 1
感謝CSDN網友:WeiXin_zjmgly指出,如果之前編譯使用了no-asm參數,則需要修改命令為:
ms\do_nasm
- 1
否則會在編譯引用了該openssl庫的工程中出現”error LNK2001和error LNK2019 無法解析的外部符號”這個錯誤。(該解決方法由 WeiXin_zjmgly 提供)
- 【編譯64位openssl】
命令如下:
ms\do_win64a.bat
- 1
執行這一步之后,在ms目錄下會生成nt.mak和ntdll.mak兩個編譯配置文件
nt.mak 用於生成靜態lib庫
ntdll.mak 用於生成動態dll庫 -
4、編譯【編譯靜態庫、動態庫有區別】
- 【編譯openssl靜態鏈接庫】
命令如下:
nmake -f ms\nt.mak nmake -f ms\nt.mak test nmake -f ms\nt.mak install
- 1
- 2
- 3
- 【編譯openssl動態鏈接庫】
命令如下:
nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test nmake -f ms\ntdll.mak install
- 1
- 2
- 3
- 執行test命令可以測試編譯好的庫,測試成功了就可以運行install命令,運行完之后才會在輸出目錄中找到輸出的編譯好的庫和加入工程時必要的include文件。
需要注意的地方:
1)設置編譯類型的時候千萬別忘記no-asm參數,關閉匯編模式,否則會出現類似如下錯誤:
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.
- 1
- 2
- 3
- 4
- 5
2)設置VC編譯環境的時候,注意有32位和64位的區別,網絡上大多數是因為沒有注意這個導致編譯失敗。
最后附上編譯所需的所有命令(一個例子):
openssl目錄:c:\openssl-1.0.2j\
以編譯64位release版本的dll為例子:cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin vcvars32.bat perl Configure VC-WIN64A no-asm --prefix="c:\openssl-1.0.2j\build-vc14-debug-win64-dll" ms\do_win64a.bat nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test nmake -f ms\ntdll.mak install nmake -f ms\ntdll.mak clean
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
至此,就可以將c:\openssl-1.0.2j\build-vc14-debug-win64-dll目錄復制到需要使用的地方就可以使用了。
最后,附上一個我編譯好的VS2015版本的openssl(1.0.2j)所有庫,共八個鏈接庫。
下載地址:http://download.csdn.net/detail/yaojingkao/9673763 -