【问题标题】:Qt-Application Deployment doesn't work. Missing entry point and dll'sQt 应用程序部署不起作用。缺少入口点和 dll
【发布时间】:2019-02-04 20:42:02
【问题描述】:

在过去的几个月里,我使用 Qt-Creator 4.7.0 版、Qt 5.11.1 版(开源版本)创建了一个项目。

现在我尝试按照Qt doc 进行部署,并使用 MSVC2017-64 位编译器构建项目,然后在生成的可执行文件上运行 windeployqt.exe。

当我在程序将必要的 dll 复制到文件夹后尝试运行可执行文件时,出现警告:

入口点? eventFilter@QAbstractItemView@@MEAA_NPEAVQObject@@PEAVQEvent@@@Z 在 DLL "my/project/path/releasefolder/project.exe" 中找不到。

在我看来,我在项目中使用的 Qt-Objects 似乎有问题,但我找不到任何东西,因为它在 Qt-Creator 中仍然可以完美运行。

我认为这可能是由于编译器有问题,所以我将其更改为 mingw32,我也尝试以相同的方式进行部署。但不知何故,在这种情况下,警告消失了,但许多 dll 仍然丢失,即使 windeployqt.exe 应该已经这样做了。而且我在硬盘上的任何地方也找不到它们。我还尝试了第三个编译器,但问题并没有消失。

我在网上搜索,只发现有人遇到 Qt dll 中缺少入口点或一般缺少 Qt-Dlls 的问题,但没有找到与我的案例相关的任何内容。

我还在每个可执行文件上尝试了 Dependency Walker,但它发现了更多丢失的 dll,这让我相信可执行文件以某种方式损坏,所以我一次又一次地尝试,但不幸的是没有成功。

有人知道为什么会发生这种情况,或者对我有什么建议吗? 也许我应该在我的项目中改变一些东西,即使它在 IDE 中运行良好。我只需要一种方法来以任何方式部署我的 Qt 项目。

编辑:使用带有 MSVC2017 的 Qt Creator 中的桌面工具包构建,出现了所描述的警告。 使用 Mingw32(桌面工具包)和 MSVC2017 使用 Qt Creator 中的 UWP 工具包构建,缺少以下 Dll,我在硬盘驱动器上的任何地方都找不到:MSVCP140_APP.dll

EDIT2:我最终下载了所需的 dll,以某种方式让它工作,但它仍然没有工作。一个构建要求 dll 现在启动但又立即自行关闭,而另一个构建突然警告我缺少过程入口点。

编辑 [解决方案]:我让 Qt Creator 创建了一个全新的项目,并将旧项目中的所有文件复制到新项目中。之后,我只将所有 dll 文件复制到该文件夹​​中,它就可以工作了。

【问题讨论】:

  • 您在硬盘中找不到它们 ..但您的应用仍在 Creator 中运行!你能列出其中的一些 dll
  • 如果您可以在 Creator 中运行,这意味着您只是缺少部署中的文件。 windeployqt 确实很糟糕,就我而言,我必须在文件夹中添加 3 个 dll,然后才能独立运行。

标签: c++ qt dll deployment entry-point


【解决方案1】:

不依赖windeploy,手动添加dll。我假设您已经使用 mingw 构建了项目。假设您使用的是 Qt 5.11.1,请转到 C:\Qt\Qt5.11.1\5.11.1\\bin\ 并复制所有 dll 文件并粘贴到您的可执行文件夹中。还从 plugins 文件夹(在 /plugins 中)复制所有目录并粘贴到您的文件夹中。现在运行应用程序,不要关闭应用程序。现在从您的可执行文件夹中删除所有文件。没有被使用的被删除,剩下的被留下。我假设您在目标计算机上执行此操作。这可能会有所帮助。

【讨论】:

  • 谢谢,首先我尝试创建一个新项目并将所有文件从旧项目复制到新项目。然后我使用您的建议将每个 dll 复制到文件夹中并删除那些未使用的。我实际上不知道究竟是什么解决了这个问题,但效果很好。
猜你喜欢
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多