当前位置:  开发笔记 > 编程语言 > 正文

QSslSocket:无法调用未解析的函数

如何解决《QSslSocket:无法调用未解析的函数》经验,为你挑选了2个好方法。

我使用Qt Creator 4.2.0运行Qt 5.7.1(MSVC 2015,32位).我有问题QSslSocket.我收到以下错误:

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error

我去了以下位置openssl github并下载了zip文件.我已将"libeay32.dll"和"ssleay32.dll"文件移到我的发布目录中,我仍然遇到这些错误.有没有人QSslSocket能够让我的步骤让套接字工作或有任何建议?



1> Phlucious..:

我最终通过谷歌搜索到了这里.在我的情况下,我在随机机器上收到此错误,因为他们错过了正确的版本libeay32.dllssleay32.dll.它是"随机的",因为有些计算机PATH从其他软件加载了这些,有些则没有.

我通过将DLL添加到bin我的Qt安装文件夹中为Qt Creator 修复此问题,并通过在我的发行版中包含上述DLL来修复此问题.

这些DLL应该与Qt首先编译的OpenSSL版本相同或类似.如果您没有自己编译,从Qt 5.4开始,您可以查询QSslSocket::sslLibraryBuildVersionString().(信用:https://stackoverflow.com/a/42297296/1666676)

不要忘记您的64位应用程序应该具有64位版本的DLL,而32位应用程序应该具有32位DLL,因此您不会遇到与此问题相同的问题.


补充说明:

从Qt 5.2开始,您必须使用1.0.0或更高版本.0.9.8不再起作用了.(来源:http://doc.qt.io/qt-5/ssl.html)

对于我的标准MSVC2017x64,Qt 5.10.1的分发sslLibraryBuildVersionString()返回"OpenSSL 1.0.2o".我使用1.0.2p作为我的发行版.

OpenSSL DLL将名称更改为OpenSSL 1.1.0 libcrypto-1_1*.dlllibssl-1_1*.dll从OpenSSL 1.1.0开始.标准Qt发行版尚未使用截至2018年9月的版本.

OpenSSL GitHub下载在这里:https://github.com/openssl/openssl/tags

希望这有助于下一个人.抱歉复活旧帖子.



2> 小智..:

将这两个文件复制到路径:'C:\ Qt\Tools(msvc/mingw){version}\bin'

C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有