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

新手上路,请多包涵

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

原文由 KirstenS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

原文由 mohammad alabid 发布,翻译遵循 CC BY-SA 3.0 许可协议

我最终通过谷歌搜索来到这里。就我而言,我 在随机机器上 遇到此错误,因为它们缺少正确版本的 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 。截至 2018 年 9 月,标准 Qt 发行版尚未使用这些发行版。
  • OpenSSL GitHub 下载地址在这里: https ://github.com/openssl/openssl/tags

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

原文由 Phlucious 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题