首页 > 解决方案 > Qt Creator QmlScene 中的 SSL 错误

问题描述

我正在使用 Qt 5.11.2 和 QML 开发的 ESRI AppStudio 3.1 应用程序。我想在 Qt Creator 中运行我的应用程序,并能够使用 qmlscene 工具对其进行预览。我按照ESRI 提供的步骤进行了设置,并且运行良好。但是,我们只是添加了通过 JavaScript 向 HTTPS 上的 API 发出 XMLHttpRequest 的功能。这在通过 AppStudio AppRun.exe 工具(Qt Creator 工具菜单 > 外部 > AppStudio > 运行)启动应用程序时有效,但在 qmlscene 中无效。尝试进行 HTTPS 调用时出现以下控制台错误:

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

我发现很多人在使用 Qt 应用程序时遇到了这个问题,并通过修复 OpenSSL .dlls 引用解决了这个问题。这个问题非常接近:QSslSocket: cannot call unresolved function 但是,它处理编译 Qt 应用程序而不为 AppStudio 应用程序运行 qmlscene 工具。

我的项目设置为使用 Desktop Qt 5.11.2 MSVC2017 64bit (msvc2017_64) 套件运行,并且我确保 libeay32.dll 和 ssleay32.dll 文件存在于 C:\Qt\Qt5.11.2\5.11.2\msvc2017_64 \垃圾桶。我已经验证 QtCreator 正在从 C:\Qt\Qt5.11.2\5.11.2\msvc2017_64\bin\qmlscene.exe 启动 qmlscene。如何让网络请求正常工作?

标签: qtqmlarcgisesri

解决方案


在我对这个错误的研究中,我发现这可能是由于使用了错误版本的 OpenSSL 库引起的。我复制了

%USERPROFILE%\Applications\ArcGIS\AppStudio\bin\libeay32.dll 
%USERPROFILE%\Applications\ArcGIS\AppStudio\bin\ssleay32.dll 

intoC:\Qt\Qt5.11.2\5.11.2\msvc2017_64\bin来替换那里的那些(我不确定它们是否从一开始就在那里,或者我是否在从 OpenSSL 网站下载它们后添加了它们)。这解决了我的问题!


推荐阅读