【问题标题】:Run time error on executing the exe manually手动执行 exe 时出现运行时错误
【发布时间】:2016-03-21 12:54:27
【问题描述】:

我有一个 Qt 应用程序,当我从 Qt Creator 执行它时它运行良好。但是,通过手动单击生成的 exe 运行它时,出现以下错误:

我会理解它是否会要求丢失 DDL(然后我可以将其放在同一个文件夹中)。但是我应该如何处理这个(一般)?

附:它没有在我的源代码中给出任何行号,我可以尝试测试这个断言。我也尝试使用发布模式,但同样的错误。

【问题讨论】:

  • 可能是 Qt 创建者和 exe 目录之间的环境差异。需要有关环境配置的更多详细信息。
  • 最有可能的是,当您“手动”运行它并且您没有正确处理该错误时,您正在做的事情失败了。照它说的做:按“重试”进行调试。然后检查调用堆栈,并找到发生这种情况时正在执行的“您的”代码中的行。
  • 你有没有尝试过进入调试器?您最初将被放置在您无权访问的 DLL 中,但您还可以向上遍历函数调用堆栈,并且您应该这样做直到您的代码。跨度>
  • 我确实尝试通过 QtCreator 在调试模式下运行它,它运行得非常好(没有警告,没有错误)。通过手动单击运行时出现此错误并按“重试”、“忽略”、“中止”具有相同的效果,应用程序关闭。

标签: c++ qt qt5 visual-c++-runtime


【解决方案1】:

我们不知道您的代码有什么问题;您需要使用调试器来找出答案。我认为您下载的预构建 Qt 库带有调试符号,但如果没有,您始终可以自己构建 Qt 以使用 -force-debug-info 配置选项获取它们。

您还可以使用DebugView 查看已部署应用程序的调试输出。

但是,一般来说,您应该使用 Qt 附带的windeployqt 工具。

Qt for Windows - Deployment 页面提供了有关将 Qt 应用程序部署到 Windows 计算机的更多信息,但 windeployqt 应该可以满足您的所有需求。

【讨论】:

  • 我从你的回答中得到了一个想法,它有效,但我想添加更多,如果我添加更多并接受它可以吗?
  • 你介意先简单解释一下你做了什么吗? :)
  • 当然 :) 这就是我的想法 - IsEmpty() 断言可能会出现,因为有些东西是“空的”/“缺失”。所以我尝试将 qml 文件放在与 exe 相同的文件夹中,它开始工作。显然我的 qmls 没有正确部署,因此出现此错误。但是通过 QtCreator 运行它不会产生这个错误。
  • 在这种情况下,您可能只需创建自己的答案并接受它。 :)
【解决方案2】:

我的 qml 文件未正确部署,因此出现此错误(此断言可能在存储主 qml 文件名的变量上,即它不应该是空字符串,如果缺少 main.qml,它是)。将 qml 文件放在正确的路径解决了这个问题。

另外,正如@mitch 在他的回答中指出的那样,使用windeployqt 找出依赖关系。虽然,我也意识到它并没有涵盖所有依赖项(例如 MSVC 运行时和其他编译器相关文件有时)。在这种情况下,运行依赖遍历器并将丢失的文件与 exe 一起手动放置。

【讨论】:

  • 我认为 windeployqt 应该尽可能多地处理部署过程,如果它缺少某些东西,那么它可能是一个错误,在这种情况下,如果在这里报告问题会很好:bugreports .qt.io。我看到很多人说他们必须手动完成某些部分,但我认为他们没有向开发人员提供反馈。
猜你喜欢
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多