一、下载文件并安装工具
1、下载OpenSSL源码
openssl官网:https://www.openssl.org
openssl版本:openssl-1.0.2m.tar.gz
下载地址: https://www.openssl.org/source/old/1.0.2/openssl-1.0.2m.tar.gz
openssl-1.0.2m.tar.gz文件解压到openssl-1.0.2m目录。
2、下载并安装Perl
ActivePerl工具
官网下载链接:http://www.activestate.com/activeperl/downloads
ActivePerl-5.26.msi
安装时,需要关闭360安全卫士,否则会报病毒。
3、下载并配置nasm
官网:www.nasm.us
使用版本:2.14rc15
下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.14rc15/win64/nasm-2.14rc15-win64.zip
解压缩nasm-2.14rc15-win64.zip,目录nasm-2.14rc15。比如D:\nasm-2.14rc15
将nasm解压缩后的目录添加到系统环境变量Path中。要重启系统,确保环境变量生效。
二、编译32位版本
1、打开命令行工具
如果使用VS2017编译32位版本,打开【VS 2017的 x64_x86 交叉工具命令提示符】。
如果使用VS2013编译32位版本,打开【VS2013 x86 本机工具命令提示】。
2、配置
进入到源码目录openssl-1.0.2m,执行如下命令:
perl Configure VC-WIN32
或
perl Configure VC-WIN32 no-asm --prefix=" E:\openssl-1.0.2m_build"
//--prefix 是后面编译成功后库安装目录
我使用的是第一个命令。
3、生成脚本
ms\do_nasm.bat
或
ms\do_ms.bat
我使用的是第一个命令。
4、编译
编译动态库:nmake -f ms\ntdll.mak
编译静态库:nmake -f ms\nt.mak
5、测试
nmake -f ms\ntdll.mak test
6、安装
nmake -f ms\ntdll.mak install
如果前面未配置安装目录,不安装也可以。
编译结果头文件在inc32目录,执行exe和dll在out32dll目录。
三、编译64位版本
1、打开命令行工具
如果使用VS2017编译64位版本,打开【适用于 VS 2017 的 x64 本机工具命令提示】。
如果使用VS2013编译64位版本,打开【VS2013 x64 本机工具命令提示】。
2、配置
进入到源码目录openssl-1.0.2m,执行如下命令:
perl Configure VC-WIN64A
或
perl Configure VC-WIN64A --prefix=" E:\openssl-1.0.2m_build"
//--prefix 是后面编译成功后库安装目录
我使用的是第一个命令。
3、生成脚本
ms\do_win64a.bat
4、编译
编译动态库:nmake -f ms\ntdll.mak
编译静态库:nmake -f ms\nt.mak
5、测试
nmake -f ms\ntdll.mak test
6、安装
nmake -f ms\ntdll.mak install
如果前面未配置安装目录,不安装也可以。
编译结果头文件在inc32目录,执行exe和dll在out32dll目录。
四、确认编译dll是32位还是64位
查询命令:dumpbin /headers libeay32.dll。
在查询结果FILE HEADER VALUES中有machine(x86)字样,表示dll是32位。
在查询结果FILE HEADER VALUES中有machine(x64)字样,表示dll是64位。
五、注意事项
1、编译32位版本和编译64位版本要分开编译。
不要在同一个目录,同时编译两个版本。
比如解压缩openssl-1.0.2m.tar.gz到openssl-1.0.2m后,先编译32位版本,并将编译结果保存好。
删除openssl-1.0.2m目录。
重新解压缩openssl-1.0.2m.tar.gz到openssl-1.0.2m后,在编译64为版本,并将编译结果保存好。
2、32位版本和64位版本,头文件内容不一样。
只有这一个头文件内容不一样:opensslconf.h
六、整理编译结果
openssl-1.0.2m_build
├─x64(64位版本目录)
│ ├─bin
│ │ libeay32.dll
│ │ ssleay32.dll
│ ├─lib
│ │ libeay32.lib
│ │ ssleay32.lib
│ └─openssl(inc32的openssl目录下的内容,64位版本)
│ *.h
│ *.c
└─x86(32位版本目录)
├─bin
│ libeay32.dll
│ ssleay32.dll
├─lib
│ libeay32.lib
│ ssleay32.lib
└─openssl(inc32的openssl目录下的内容,32位版本)
*.h
*.c