這是我的博客的另一個(gè)地址:http://blog.sina.com.cn/s/blog_149e9d2ec0102wzvi.html
1. 首先從網(wǎng)上下載兩個(gè)文件:一個(gè)是Perl,一個(gè)是openssl-1.0.1.
2. 然后對(duì)ActivePerl進(jìn)行安裝。解壓openssl-1.0.1.tar.gz至C盤。
3. 使用VS2010自動(dòng)命令行來生成openssl對(duì)應(yīng)庫。如果沒有VS2010的請(qǐng)自行下載安裝。
4. 我們此處使用生成64位庫的命令提示窗口。
5. 然后我們進(jìn)入openssl-1.0.1的解壓目錄下,我們的解壓目錄在:C:\openssl-1.0.1下,你如果解壓到其他目錄,那么就去對(duì)應(yīng)目錄下查找即可。
6. 在openssl-1.0.1對(duì)應(yīng)的目錄下找到這幾個(gè)文件,他們都是生成對(duì)應(yīng)平臺(tái),對(duì)應(yīng)位數(shù)的命令操作的幫助文檔。上面有一定的幫助作用。不過下面我會(huì)進(jìn)行詳細(xì)的介紹,或許和這個(gè)使用有些不同。
7. 首先我們打開文檔INSTALL.W64作為參考。
a: 我們要生成windows下64位release模式的靜態(tài)庫。
首先需要在命令提示窗口依次輸入如下命令:
perl Configure VC-WIN64A no-asm--prefix=c:\openssl_64libRelease
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.makinstall
nmake -f ms\nt.maktest
其中:
VC-WIN64A:表示生成windows下64位release模式的庫。
no-asm:表示不使用匯編。
--prefix=c:\openssl_64Release:表示配置的生成文件都放在目錄c:\openssl_64Release中。
nmake -fms\nt.mak:中nt.mak表示生成靜態(tài)庫,如果換成ntdll.mak表示生成動(dòng)態(tài)庫。
nmake -f ms\nt.makinstall:生成的靜態(tài)庫放到c:\openssl_64libRelease目錄下。
下面是這幾條命令執(zhí)行的結(jié)果。
b: 如果我們要生成windows下64位debug模式的靜態(tài)庫。
perl Configure debug-VC-WIN64Ano-asm --prefix=c:\openssl_64libdebug
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
nmake -f ms\nt.mak test
c: 如果我們要生成windows下64位release模式的動(dòng)態(tài)庫。
perl Configure VC-WIN64A no-asm--prefix=c:\openssl_64dllrelease
ms\do_win64a
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak test
d: 如果我們要生成windows下64位debug模式的動(dòng)態(tài)庫。
perl Configure debug-VC-WIN64Ano-asm --prefix=c:\openssl_64dlldebug
ms\do_win64a
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak test
注:
windows下32位對(duì)應(yīng)的庫文件。
a. 我們要生成windows下32位release模式的靜態(tài)庫。
perl Configure VC-WIN32no-asm --prefix=c:\openssl_32libRelease
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
nmake -f ms\nt.mak test
b: 如果我們要生成windows下32位debug模式的靜態(tài)庫。
perl Configuredebug-VC-WIN32 no-asm--prefix=c:\openssl_32libdebug
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
nmake -f ms\nt.mak test
c: 如果我們要生成windows下32位release模式的動(dòng)態(tài)庫。
perl Configure VC-WIN32 no-asm--prefix=c:\openssl_32dllrelease
ms\do_ms
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak test
d: 如果我們要生成windows下32位debug模式的動(dòng)態(tài)庫。
perl Configuredebug-VC-WIN32 no-asm--prefix=c:\openssl_32dlldebug
ms\do_ms
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak test
之前遇到一個(gè)很大的問題,就是如何在VS2010使用openssl編譯產(chǎn)生的靜態(tài)庫libeay32.lib和ssleay32.lib。
比如我們寫一下代碼:
#include “openssl/ssl.h”
#include “openssl/err.h”
#include “iostream”
using namespace std;
//#pragma comment( lib, "ws2_32.lib" ) //socket庫,關(guān)鍵的一個(gè)庫
#pragma comment( lib, "libeay32.lib" )
#pragma comment( lib, "ssleay32.lib" )
int main()
{
SSL_load_error_strings();
SSL_library_init();
OpenSSL_add_all_algorithms();
ERR_load_BIO_strings();
const SSL_METHOD* m = SSLv23_method();
SSL_CTX *ctx = SSL_CTX_new(m);
return 0;
}
編譯后會(huì)出現(xiàn)一大堆問題和錯(cuò)誤:
1>------ Rebuild All started: Project: testssl2,Configuration: Debug Win32 ------
1>Build started 2017/5/9 13:44:35.
1>_PrepareForClean:
1> Deleting file"Debug\testssl2.lastbuildstate".
1>InitializeBuildStatus:
1> Creating"Debug\testssl2.unsuccessfulbuild" because "AlwaysCreate" wasspecified.
1>ClCompile:
1> ssl2.cpp
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__closesocket@4 referenced in function_sock_free
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__shutdown@8 referenced in function_sock_free
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__recv@16 referenced in function_sock_read
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__WSASetLastError@4 referenced in function_sock_read
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__send@16 referenced in function_sock_write
1>libeay32.lib(bss_sock.obj) : error LNK2019: unresolvedexternal symbol __imp__WSAGetLastError@0 referenced in function_BIO_sock_should_retry
1>E:\VS\TESTSSL1\Debug\testssl2.exe : fatal error LNK1120:6 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.08
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped==========
我為了這個(gè)問題困擾了我好長的時(shí)間,現(xiàn)在才現(xiàn)在我缺少了一個(gè)關(guān)鍵庫的引用,他就是:
#pragma comment( lib,"ws2_32.lib" )
如果我們加上這一句話,那么問題就迎刃而解了。
衷心的希望我曾經(jīng)的困惑能給你帶來幫助。