仅在已部署的 Qt 应用程序上出现未知的网络相关错误

Posted

技术标签:

【中文标题】仅在已部署的 Qt 应用程序上出现未知的网络相关错误【英文标题】:unknown network-related error only on deployed Qt application 【发布时间】:2014-05-06 17:15:03 【问题描述】:

我创建了一个通过 http 协议下载文件的下载器应用程序。 我使用 QNetworkAccessManager/QNetworkReply/QNetworkRequest 类来实现这一点。

QNetworkReply 文档中列出了几个错误代码,其中一个是错误代码 99,它是“未知的网络相关错误”。

在我的开发机器上,每当我使用应用程序启动下载时,它都会顺利下载,并且我没有收到任何错误代码 99。

当我在另一台没有安装 Qt 的 PC 上部署我的应用程序并对其进行测试时,当我开始下载时,我立即收到错误代码 99;但是,使用 QNetworkAccessManager 类的其他函数也可以正常工作,即使在环境中没有 Qt 的 PC 上(例如 http POST 方法)。

我还使用与 OS X 完全相同的代码部署了这个应用程序,它的部署版本没有出现任何错误代码 99,并且一切正常。

在没有 Qt 开发环境的 PC 系统上,我会收到未知的网络相关错误吗?

我检查了dependency-walker 的所有依赖项等。我有点不知所措,不知道如何继续。

【问题讨论】:

【参考方案1】:

显然,问题在于 QtNetwork API 使用 OpenSSL 进行某些操作。这在 Qt Docs 中并没有明确说明。有一个支持 SSL 的类,我认为如果我使用该类而不是 QNetworkAccessManager,我只需要包含 SSL DLL:

http://qt-project.org/doc/qt-5/ssl.html

它在我的开发机器上工作的原因是因为 OpenSSL DLL 在我的 PATH 变量上。

在应用程序目录中包含 OpenSSL DLL 解决了该问题。

【讨论】:

以上是关于仅在已部署的 Qt 应用程序上出现未知的网络相关错误的主要内容,如果未能解决你的问题,请参考以下文章

Qt 静态应用程序无法在已部署的系统上运行

Qt 中的 GLWidget 仅在 mousemove 上更新

无法在已部署的反应本机应用程序上使用 IP 地址进行本地网络调用

Android:在已部署的应用程序中找不到资源异常

Qt5 部署的 QtWebEngine 项目不播放 Html5 视频

Qt - 错误:未知模块networkauth [关闭]