零、环境
 
win10-64位 + VS2019
一、手动编译
 
前言:对于一般的开发人员而言,在 openssl 上下载已经编译好的 openssl 库,然后直接拿去用即可,,不用手动编译,{见下文直接安装}。。。对于一些开发人员,可能需要修改openssl源码,那么编译它势在必行。。。
1、安装perl
https://platform.activestate.com/ActiveState-Projects/ActiveState-Perl-5.36.0

两种方法都没能成功。。第一种下载后会得到一个 state-remote-installer.exe,然后安装时会在命令行中执行,,命令行中输入Y会继续下载,,,下载极慢,,放弃。。
 第二种执行命令直接报错如下所示。
 
 总的来说,通过官网给定的方式去倒腾,都不好搞。。。
 于是,走第三方去下载,,http://www.xz7.com/downinfo/43699.html。
 下载速度非常之快。。
 安装完毕后,会自动添加至环境变量。
 此时打开cmd,输入 perl -v,输出如下,表示安装成功。
 
2、 下载安装nasm
 https://www.nasm.us/
 
 
此处下载2.16.01稳定版本。
 安装完毕,将安装目录添加至系统环境变量中,输入nasm -v,输出以下表示安装成功。
 
3、下载安装openssl
 openssl官网
 
 此处下载1.1.1b.tar.gz版本。
4、开始编译
 以管理员身份运行vs2019-64bit命令行工具,因为此处要编译成64位的库。
 然后切换到解压后的目录中。
 
perl Configure VC-WIN64A  --prefix=D:\openssl111b\openssl-1.1.1b\bin
注意 ,–prefix必须为绝对路径, 否则报错。
 开始执行命令,结果报错如下:
D:\openssl111b\openssl-1.1.1b>perl Configure VC-WIN64A  --prefix=D:\openssl111b\openssl-1.1.1b\bin
Configuring OpenSSL version 1.1.1b (0x1010102fL) for VC-WIN64A
Using os-specific seed configuration
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: D:/openssl111b/openssl-1.1.1b/util/perl D:/openssl111b/perlInstall/site/lib D:/openssl111b/perlInstall/lib) at D:/openssl111b/perlInstall/site/lib/ActivePerl/Config.pm line 400.
Compilation failed in require at D:/openssl111b/perlInstall/site/lib/ExtUtils/MakeMaker.pm line 9.
BEGIN failed--compilation aborted at D:/openssl111b/perlInstall/site/lib/ExtUtils/MakeMaker.pm line 9.
Compilation failed in require at D:/openssl111b/perlInstall/site/lib/IPC/Cmd.pm line 235.
需要修改perl安装目录下的文件。
 D:/openssl111b/perlInstall/site/lib/ActivePerl/Config.pm
 ps:若不知道自己的安装位置,可借助Everything进行全局搜索。。。
 
找到后修改此文件,注释395-413行左右的代码,如下所示:
 
 此时再次执行上述命令,openssl的配置已经结束,makefile已经生成,如下所示。
 
 然后执行 nmake ,等待编译完成,,,
 紧接着执行name install,此时将安装到之前配置时指定的bin目录,,,
 安装完毕,去bin目录查看安装后的及结果。。。,如下所示,已经分门别类的安装好了。。。

二、直接安装
 
现在直接下载openssl的exe版本,版本号是:Win64 OpenSSL v1.1.1v Light
 https://slproweb.com/products/Win32OpenSSL.html

 
 安装中会有以下提示,默认即可。
 
 实际我最关心的就是这两个库了。因为https建立连接的时候需要用到它。
三、顺便解决一个Qt报错
 
程序中会访问https://50.50.1.118服务。采用https协议,需要openssl支持。。
 编译套件是:Qt5.13-MSVC2017-64bit。
    qDebug() << QSslSocket::supportsSsl();qDebug()<<"QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();

 报错:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed。
 很明显,此时并不支持ssl,就是缺少openssl的库。
 
实际上就是缺少上面的两个库。
此时,运行QT程序,,一切正常,,不再报错了。。

 如果还是不行,建议直接将这两个库拷贝到 E:\Qt5.13.1\install\5.13.1\msvc2017_64\bin目录下。。。
 当然程序打包的时候也别忘了要拷过去。
四、参考博客
OpenSSL之六:OpenSSL源码编译安装
 Windows 下编译 OpenSSL