Qt种http项目运行错误
引言
本文主要记录在阅读和运行Qt的示例代码http时,运行时不能正常运行的问题。
问题描述
示例代码打开后,编译,运行程序启动后正常出现界面:
啥也不做,点击Download按钮之后,控制台应用程序输出:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
是缺少对应的openssl库。
解决方法
查看openssl版本
查询自己当前的环境下需要的对应版本的openssl库,可以使用下面的代码:
qDebug()<<"version:"<<QSslSocket::sslLibraryBuildVersionString();
在项目中添加上述代码,编译运行程序,查看控制台输出。我使用的是windowns下Qt5.15.2 msvc2019_64bit,控制台输出对应的openssl的版本:
version: "OpenSSL 1.1.1g 21 Apr 2020"
生成使用openssl库
下载对应版本的openssl库来用,发现官网上没有提供openssl1.1.1g对应的库,只可以找到对应版本的源码。下载OpenSSL 1.1.1g的源码到本地,想自己编译生成动态库的可以看文章末尾的参考文章。
如果嫌弃麻烦,不想自己编译,那么文章开头提供的编译生成的动态库,可以直接下载之后使用。
我就是参考这篇文章与上面的那篇文章,使http项目可以正常运行。
使用
将生成的库libcrypto-1_1-x64.dll和libssl-1_1-x64.dl
拷贝到应用程序的执行目录下,
同时再拷贝到Qt安装目录下的对应的编译器所在bin目录下。
再去编译运行项目http就可以正常下载了。
注意
若是自己编译源码来生成动态库,按照本文末尾的参考文章所提供的生成对应平台的动态库编译过程中,若是执行过程中出现一些错误,也可以试图继续按步骤向下执行,最后去源码所在的目录下查找是否生成了动态库。
我按照上面的文章OpenSSL动态链接库源码安装编译过程中虽出现错误(在执行namke test时报错,但我还是继续执行nmake install,虽然依旧报错),但是最后还是生成了动态库,也可正常使用。