繁体   English   中英

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

[英]QSslSocket: cannot call unresolved function

我使用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工作,可以给我步骤让套接字工作或有任何建议?

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

我通过将DLL添加到我的Qt安装的bin文件夹中为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
  • 对于Qt 5.10.1的标准MSVC2017x64分发, sslLibraryBuildVersionString()返回“OpenSSL 1.0.2o”。 我使用1.0.2p作为我的发行版。
  • 从OpenSSL 1.1.0开始,OpenSSL DLL将名称更改为libcrypto-1_1*.dlllibssl-1_1*.dll 标准Qt发行版尚未使用截至2018年9月的版本。
  • OpenSSL GitHub下载在这里: https//github.com/openssl/openssl/tags

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

将这两个文件复制到路径:'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

你需要手动添加对OppenSSL的支持,因为android放弃了对它的支持,我使用的是QT 5.9而且它不适合你,所以你的任务是创建openSSL lib

您可以直接在这里下载https://wiki.openssl.org/index.php/Binaries

或者在这里https://indy.fulgan.com/SSL/

然后复制这些文件并将它们包含在您的项目中

libcrypto.so
libssl.so

这应该正常工作

或者您可以使用此脚本生成libcrypto.solibssl.so ,只需按步骤操作https://github.com/ekke/android-openssl-qt

通过结合现有答案和一些研究,我设法使其与MSVC2017 x64编译器一起使用:

  1. 从这里下载1.0版本(Win64 OpenSSL v1.0.2r Light): https//slproweb.com/products/Win32OpenSSL.html
  2. 安装时,选择将DLL复制到OpenSSL bin目录。
  3. 然后将libeay32.dllssleay32.dll从OpenSSL bin文件夹复制到: {Your_Qt_Folder}/{Qt_version}/msvc2017_64/bin

我解决了这个问题。

  1. 下载并安装v1.0.2s << - ( libeay32.dllssleay32.dll ), 网址https://slproweb.com/products/Win32OpenSSL.html

  2. 复制libeay32.dllssleay32.dll

  3. 在Qt文件夹中找到QtNetwork*.dll 在我的例子中,路径是C:\\Qt\\Tools\\QtCreator\\bin

  4. libeay32.dllssleay32.dll粘贴到C:\\Qt\\Tools\\QtCreator\\bin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM