1.1 下载OpenSSL源码

下载地址:https://www.openssl.org/source/,这里选择openssl-1.0.2q.tar.gz。

1.2 下载安装ActivePerl

下载地址:https://www.activestate.com/activeperl/downloads/,如果这个网址打不开的话,可以直接百度搜索ActivePerl下载。或者到腾讯软件中心:https://pc.qq.com/,搜索ActivePerl进行下载。

运行安装程序,一直下一步操作安装完成。这里默认安装在C:\Perl64。可以在命令行窗口下按如下方式验证是否安装成功。

1.3 编译OpenSSL基于/MTd运行时库的静态库

1.3.1 解压OpenSSL源码

这里解压到E盘根目录下,解压后路径为:E:\openssl-1.0.2q。

1.3.2 运行VS2010命令行工具32位版本

这里是要编译32位,所以使用32位的VS2010命令行工具,如下图所示。

启动32位命令行工具,如下图所示:

使用cd命令进入OpenSSL源码解压目录,如下图所示:

1.3.3 编译OpenSSL

编译过程可以在INSTALL.W32文件中找到,使用notepad++打开该文件,找到Visual C++部分,如下图所示:

按照说明,由于默认的选项是/MTd,按如下步骤执行:

1、配置debug-VC-WIN32,这里选择不使用汇编语言,执行命令:perl Configure debug-VC-WIN32 no-asm –prefix=E:\OpenSSL\Debug_MTD

2、执行命令:ms\do_ms,将产生用于编译静态库的nt.mak及动态库的ntdll.mak文件。
这时打开ms/nk.mak可以看到默认为/MTd配置,如下图所示:

由于后面靠该文件进行编译,防止被修改,这里看完最好关闭。

3、修改ms/nt.mak得到对应pdb文件,如果不需要pdb可以忽略。LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib修改为:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/OpenSSL_MTd。这样修改的目的是在使用该库的时候会查找OpenSSL_MTd.pdb文件,可以在tmp32.dbg目录下拷贝出OpenSSL_MTd.pdb。

4、执行命令:nmake –f ms\nt.mak,编译静态库。

5、执行命令:namke –f ms\nt.mak test,进行测试,出现passed all tests说明测试通过。

6、执行命令:nmake –f ms\nt.mak install,进行安装,把生成的库及头文件拷贝到配置的输出目录下,到这里/MTd的静态库生成完毕。

1.4 编译OpenSSL各种运行时库的静态库

在使用静态库时,必须与静态库编译时选择的运行库保持一致,所以这里把各种运行时库的静态库都编译出来,运行时库的说明如下:

  • /MTd 多线程调试,依赖libcmtd.lib,对应宏_DEBUG、_MT
  • /MT 多线程,依赖libcmt.lib,对应宏_MT
  • /MDd 多线程调试DLL,依赖msvcrtd.lib,对应宏_DEBUG、_MT、_DLL
  • /MD 多线程DLL,依赖msvcrt.lib,对应宏_MT、_DLL

1.4.1 /MTd

按如下步骤操作:

  1. 删除目录E:\openssl-1.0.2q,重新解压到OpenSSL源码到该目录下;
  2. 启动VS2010命令行工具32位版本,并定位到E:\openssl-1.0.2q目录下;
  3. 执行:perl Configure debug-VC-WIN32 no-asm –prefix=E:\OpenSSL\Debug_MTD;
  4. 执行:ms\do_ms,产生用于编译的nt.mak文件;
  5. 打开ms\nt.mak文件,修改:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib,改为:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/OpenSSL_MTd;
  6. 执行:nmake –f ms\nt.mak,编译;
  7. 执行:namke –f ms\nt.mak test,测试;
  8. 执行:nmake –f ms\nt.mak install,把编译的库及头文件拷贝到配置目录下;
  9. 从目录tmp32.dbg拷贝OpenSSL_MTd.pdb到E:\OpenSSL\Debug_MTD\lib;

1.4.2 /MT

按如下步骤操作:

  1. 删除目录E:\openssl-1.0.2q,重新解压到OpenSSL源码到该目录下;
  2. 启动VS2010命令行工具32位版本,并定位到E:\openssl-1.0.2q目录下;
  3. 执行:perl Configure VC-WIN32 no-asm –prefix=E:\OpenSSL\Release_MT;
  4. 执行:ms\do_ms,产生用于编译的nt.mak文件;
  5. 打开ms\nt.mak文件,修改:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib,改为:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/OpenSSL_MT;
  6. 执行:nmake –f ms\nt.mak,编译;
  7. 执行:namke –f ms\nt.mak test,测试;
  8. 执行:nmake –f ms\nt.mak install,把编译的库及头文件拷贝到配置目录下;
  9. 从目录tmp32拷贝OpenSSL_MT.pdb到E:\OpenSSL\Release_MT\lib;

1.4.3 /MDd

按如下步骤操作:

  1. 删除目录E:\openssl-1.0.2q,重新解压到OpenSSL源码到该目录下;
  2. 启动VS2010命令行工具32位版本,并定位到E:\openssl-1.0.2q目录下;
  3. 执行:perl Configure debug-VC-WIN32 no-asm –prefix=E:\OpenSSL\Debug_MDD;
  4. 执行:ms\do_ms,产生用于编译的nt.mak文件;
  5. 打开ms\nt.mak文件修改CFLAG= /MTd…为CFLAG= /MDd…,修改后保存关闭;
  6. 打开ms\nt.mak文件,修改:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib,改为:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/OpenSSL_MDd;
  7. 执行:nmake –f ms\nt.mak,编译;
  8. 执行:namke –f ms\nt.mak test,测试;
  9. 执行:nmake –f ms\nt.mak install,把编译的库及头文件拷贝到配置目录下;
  10. 从目录tmp32.dbg拷贝OpenSSL_MDd.pdb到E:\OpenSSL\Debug_MDD\lib;

1.4.4 /MD

按如下步骤操作:

  1. 删除目录E:\openssl-1.0.2q,重新解压到OpenSSL源码到该目录下;
  2. 启动VS2010命令行工具32位版本,并定位到E:\openssl-1.0.2q目录下;
  3. 执行:perl Configure VC-WIN32 no-asm –prefix=E:\OpenSSL\Release_MD;
  4. 执行:ms\do_ms,产生用于编译的nt.mak文件;
  5. 打开ms\nt.mak文件修改CFLAG= /MT…为CFLAG= /MD…,修改后保存关闭;
  6. 打开ms\nt.mak文件,修改:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/lib,改为:LIB_CFLAG=/Zl /Zi /Fd$(TMP_D)/OpenSSL_MD;
  7. 执行:nmake –f ms\nt.mak,编译;
  8. 执行:namke –f ms\nt.mak test,测试;
  9. 执行:nmake –f ms\nt.mak install,把编译的库及头文件拷贝到配置目录下;
  10. 从目录tmp32拷贝OpenSSL_MD.pdb到E:\OpenSSL\Release_MD\lib;