零、环境
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