13

我正在使用 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可以给我步骤让插座工作或有任何建议?

4

5 回答 5

11

我最终通过谷歌搜索来到这里。就我而言,我在随机机器上遇到此错误,因为它们缺少正确版本的libeay32.dlland ssleay32.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 )
  • 对于我的 Qt 5.10.1 的标准 MSVC2017x64 分发sslLibraryBuildVersionString()返回“OpenSSL 1.0.2o”。我的发行版使用 1.0.2p。
  • OpenSSL DLL 更改名称libcrypto-1_1*.dlllibssl-1_1*.dll从 OpenSSL 1.1.0 开始。截至 2018 年 9 月,标准 Qt 发行版尚未使用这些发行版。
  • OpenSSL GitHub 下载地址在这里:https ://github.com/openssl/openssl/tags

希望这可以帮助下一个人。很抱歉复活了一个旧帖子。

于 2017-09-14T18:49:09.397 回答
7

将这两个文件复制到路径:'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
于 2017-10-28T00:26:14.867 回答
3

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

于 2017-06-04T12:34:35.637 回答
0

通过结合此处现有的答案和一些研究,我设法使其与 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
于 2019-04-15T22:19:24.793 回答
0

我解决了这个问题。

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

  2. 复制libeay32.dllssleay32.dll

  3. QtNetwork*.dll在您的 Qt 文件夹中查找。就我而言,路径是C:\Qt\Tools\QtCreator\bin.

  4. 粘贴libeay32.dllssleay32.dllC:\Qt\Tools\QtCreator\bin.

于 2019-07-02T01:33:22.373 回答