windows下openssl编译
OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用。对于一般的开发人员而言,在http://slproweb.com/products/Win32OpenSSL.html 上下载已经编译好的OpenSSL库是省力省事的好办法。对于高级的开发用户,他们可能需要适当的修改或者裁
OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用。对于一般的开发人员而言,在http://slproweb.com/products/Win32OpenSSL.html 上下载已经编译好的OpenSSL库是省力省事的好办法。对于高级的开发用户,他们可能需要适当的修改或者裁剪OpenSSL,那么编译它就成为了一个关键问题。本篇博客就是主要讲述如何早Windows上编译OpenSSL库?
笔者按照一定的步骤成功了编译了OpenSSL库,步骤如下:
从http://www.activestate.com/activeperl/downloads 下载并安装ActivePerl。
从http://www.nasm.us/ 下载并安装Nasm汇编器。
从http://www.openssl.org/下载并安装OpenSSL的最新Release包
编译:
转到$(Visual Studio目录)\VC\bin目录下执行 vcvars32.bat 以配置环境变量或从开始进入VS的Visual Studio Tools根据需要选择VS2013 x86 本机工具命令提示。(开始我手贱打开另一个cmd去运行命令,出现缺失windows.h等类似错误,请教大神时发现,配置的环境变量只对当前cmd有效,汗)如图:
以下为参照该目录下的文件INSTALL.W32的执行过程:
-运行configure :
编译Release
>perl Configure VC-WIN32 --prefix=c:\some\openssl\dir
编译Debug
如果你需要编译一个Debug版的,发须先修改 ms\do_ms.bat 找到这两行(第2,3行)
perlutil\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perlutil\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
修改为
perl util\mk1mf.pl no-asm debug VC-WIN32>ms\nt.mak
perl util\mk1mf.pl dll no-asm debug VC-WIN32 >ms\ntdll.mak
如果你不想用汇编语言加上 no-asm
创建Makefile文件:
>ms\do_ms
编译动态库:如果编译成功,最后的输出都在out32dll目录下
>nmake -f ms\ntdll.mak
编译静态库:输出在out32目录下
nmake -f ms\nt.mak
测试库:测试成功返回passed all tests
nmake -f ms\ntdll.mak test
安装库:
nmake -f ms\ntdll.mak install
清除上次库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
在项目包含目录添加include目录,附加目录添加lib目录
测试一下:
#include "stdafx.h"
#include <string>
#include <iomanip>
#include <iostream>
#include <openssl/md5.h>
#include <openssl/sha.h>
using namespace std;
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
int main(int argc, char* argv[])
{
std::string str = "1234";
unsigned char md[MD5_DIGEST_LENGTH];
char tmp[3] = { 0 };
MD5((const unsigned char*)str.c_str(), str.size(), md);
cout << "MD5 : ";
for (int i = 0; i < MD5_DIGEST_LENGTH; i++)
{
cout << setw(2) << setfill('0') << hex << (int)(md[i]);
}
cout << endl;
system("PAUSE");
return 0;
}
更多推荐
所有评论(0)