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

QSslSocket: cannot call unresolved function

我是 运行 Qt 5.7.1(MSVC 2015,32 位)和 Qt Creator 4.2.0。我对 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 工作,可以给我一些步骤让套接字工作或有任何建议吗?

您需要手动添加对 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

我通过谷歌搜索最终来到这里。在我的例子中,我在随机机器 上收到此错误,因为它们缺少 libeay32.dllssleay32.dll 的正确版本。它是 "random",因为有些计算机从其他软件 PATH 中加载了这些内容,而有些则没有。

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

DLL 应该与最初编译 Qt 时使用的 OpenSSL 版本相同或相似。如果你没有自己编译它,从 Qt 5.4 开始你可以用 QSslSocket::sslLibraryBuildVersionString(). (Credit: )

查询它

不要忘记您的 64 位应用程序应该有 64 位版本的 DLL,而 32 位应用程序应该有 32 位 DLL,这样您就不会遇到与 [=19] 相同的问题=].


补充说明:

  • 从 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。截至 2018 年 9 月,标准 Qt 发行版尚未使用这些发行版。
  • OpenSSL GitHub 下载地址:https://github.com/openssl/openssl/tags

希望这对下一个人有帮助。很抱歉复活了一个旧的post。

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

通过结合此处的现有答案和一些研究,我设法使其适用于 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. https://slproweb.com/products/Win32OpenSSL.html 下载并安装 v1.0.2s <<--(libeay32.dll, ssleay32.dll)

  2. 复制libeay32.dllssleay32.dll

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

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