为了能在qt中访问https,msvc编译器版本的需要自己编译openssl。幸运的是网上有很多相关的博客,所以直接照着做就是了。
0.准备工作先从网上下载OpenSSL源文件,我是在这里下载的 http://distfiles.macports.org/ 。
安装Perl http://www.perl.org/get.html (我用的64bit的,感觉没影响)。
1.MSVC2015编译OpenSSL 1.0.1 32bit对于Qt5.9.8,链接的是OpenSSL 1.0.2p,我编译了1.0.f和1.0.s版本,都能访问https,只是对于1.1.x的dll貌似不支持。
编译步骤:
- 在VS开发人员命令提示框中,cd到openssl原文件目录
- 执行perl Configure VC-WIN32 no-asm (64位是VC-WIN64A,我没装nasm汇编器所以去掉asm,如需要指定路径请参考别人的设置,如填写--prefix="C:/openssl-1.1.0f/win64-release" --openssldir="C:/openssl-1.1.0f/win64-release/ssl" )
- 执行ms\do_ms.bat (生成makefile,64位是ms\do_win64a.bat )
- 执行nmake -f ms\nt.mak (编译动态库)
- 执行nmake - f ms\ntdll.mak test (查看库是否有问题)
- 执行nmake - f ms\ntdll.mak install (copy到安装目录,我没执行这个,直接去out32dll文件夹copy的动态库)
在Qt5.9.8中的使用,直接copy生成的libeay32.dll和ssleay32.dll到程序运行目录,就能正常使用了。
参考博客:https://blog.csdn.net/alger_magic/article/details/52584171
参考博客:https://blog.csdn.net/u010129119/article/details/52815441
2.MSVC2015编译OpenSSL 1.1.1 32bit和64bit对于Qt5.12.4,链接的是OpenSSL 1.1.1b,虽然默认也能访问https,但是会有sslerror信息的信号发出来。
1.1.x32bit和1.0.x32bit的编译过程差不都,如下:
- 在VS开发人员命令提示框中,cd到openssl原文件目录
- 执行perl Configure VC-WIN32 shared no-asm
- 执行nmake
- 执行nmake test (这一步我会在70-test_comp.t的地方卡住,我直接关了窗口,然后去拿的dll)
(遇到个问题就是我环境变量中的rc路径和他的冲突了,我把环境变量删了就过了)
1.1.x64bit编译时,遇到了一些小问题,一个是到set asm=m164报错(我明明设置了no-asm),我直接下载了一个nasm装上然后设置好环境变量;另一个是提示和目标计算机32位不兼容,我就打开的“vs2015 x64本机工具命令提示符”窗口(正确的姿势是设置配置文件,但是秉着能用就行的态度,我就没去折腾了),接下来就和32位是一样的步骤了。
在Qt5.12.4中的使用,直接copy生成的libcrypto-1_1-x64.dll和libssl-1_1-x64.dll到程序运行目录,即可(我是MSVC2015 - 64bit)。
参考博客:https://morton.li/visualstudio2015%E7%BC%96%E8%AF%91openssl-1-1-0i/
参考博客:https://blog.51cto.com/fengyuzaitu/2150487
参考博客:https://blog.csdn.net/ljttianqin/article/details/72978612
3.MSVC2019编译OpenSSL这次我直接clone的github的源文件,结果因为没注意版本编译出来的不能用(心塞),不过流程应该是差不多的。
对于32位的流程如下:
- 打开VS x86提示框,跳转到openssl源文件目录下
- 执行perl Configure VC-WIN32 shared no-asm --prefix="D:/openssl/build32" --openssldir="D:/openssl/ssl32"
- 修改makefile文件,如果有 /WX 的话去掉,不然32位会报c2220错误)
- nmake
- nmake test (奇怪的是在vs2019没像vs2015那样卡在某一步)
- nmake install
- 前面的步骤出错后nmake clean清除重来
VC-WIN32我一开始写成了VC-WIN64A,结果报m164错误(我用的x86命令行)。如果是VC-WIN32用x86命令行也报这个错误,我想我只能靠装个nasm了。
在某个版本,我报c2220这个错误,修改makefile注释掉/WX后即可
另外,如果出现 link 之类的错误,可以看看编译设置和自己的命令行窗口是不是都是x86的,这个应该也可以通过配置文件来修改(略)。
对于64位的流程如下:
- 打开VS x64提示框,跳转到openssl源文件目录下
- 执行perl Configure VC-WIN64A shared no-asm --prefix="D:/openssl/build32" --openssldir="D:/openssl/ssl32"
- nmake
- nmake test
- nmake install