qt - 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。如何让网络请求正常工作?
解决方案
在我对这个错误的研究中,我发现这可能是由于使用了错误版本的 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 网站下载它们后添加了它们)。这解决了我的问题!
推荐阅读
- php - 使用 PHPMailer 为多个表单发送邮件后如何重定向?
- java - spring boot 应用程序无法使用 jdk 11 和 tomcat 版本 9.0.24 运行
- javascript - Leaflet -> 删除 CircleLayer 不起作用
- maven - org.apache.ant:ant-launcher:1.8.2 的依赖收敛错误
- ruby - “如果被标记?” 内部执行资源(厨师)
- angular - Ag-grid 服务器端分页与服务器端行模型
- sql-server - 如何使用 Boomi 获取数据并将其存储?
- python - 在 Ubuntu 上安装 Devstack 时出错:“/opt/stack/requirements/.venv/bin/pip”不存在
- php - Laravel - 如何处理不同的嵌套关系但模型相同?
- visual-studio-code - 如何使用户片段在字符串中工作:vscode