【问题标题】:QT example executables won't run, missing QT5Cored.dllQT 示例可执行文件无法运行,缺少 QT5Cored.dll
【发布时间】:2015-02-26 00:52:03
【问题描述】:

QT5Cored.dll 在我的系统@:C:\Qt\5.4\mingw491_32\bin 文件夹中

Analogclock 示例和其他项目将在 IDE 中运行,但无法从创建的 .exe 文件中运行。启动 EXE 时会出现 QT5Cored.dll 丢失错误。 QT安装了它,但不知道它在哪里? 删除并重新安装了 QT,结果相同。

今天早些时候下载了。 版本:3.3.1,QT 5.4.1(MSCV 2010,32 位),2015 年 2 月 20 日构建。

任何建议表示赞赏。

DLL 填充添加到 exe 目录后的新错误。

【问题讨论】:

  • 你使用什么编译器?顺便说一句,Qt 将调试构建和发布构建分开,并为它们提供了不同的 .dll 集。在您的情况下,QT5Cored.dll 用于调试构建,QT5Core.dll 用于发布构建。如果您将来想要一个可执行的 .exe,请确保选择发布版本和正确的 .dll。在 Qt Creator 之外运行调试构建毫无意义。
  • 您使用的是使用 MSVC 编译的 Qt,但不知何故您引用了使用 gcc 编译的 Qt dll?这永远不会起作用。您的应用程序和 Qt 必须使用相同的编译器进行编译。

标签: c++ qt


【解决方案1】:

要在 Qt Creator 之外运行它,您有两个选择:

  1. 将缺少的 DLL 复制到可执行文件所在的目录。例如,如果analogclock.exec:\examples 中,则将C:\Qt\5.4\mingw491_32\bin\Qt5Cored.dll 和其他所需的DLL 复制到c:\examples。您可能还需要复制插件文件。
  2. C:\Qt\5.4\mingw491_32\bin 添加到PATH 环境变量中。

有一些方法可以复制丢失的 DLL:

1.使用 Windows 部署工具 (windeployqt.exe) 复制所需文件

  1. 以下列方式之一打开命令提示符:
    1. 如果您使用 MSVC 作为编译器,请打开正确的 Visual Studio 命令提示符。例如对于 VS2013 32 位,单击Start -> Microsoft Visual Studio 2013 -> Visual Studio Tools -> VS2013 x86 Native Tools Command Prompt。这将打开一个正确设置了VCINSTALLDIR 环境变量的命令提示符。 windeployqt.exe 需要此环境变量来复制正确的 Visual C++ 可再发行可执行文件。
    2. 如果您使用 MinGW,只需打开命令提示符即可。
  2. 将 Qt 二进制路径和可选的 g++.exe 路径添加到 PATH 环境变量。如果您的可执行文件是 32 位,请添加 32 位 Qt 二进制路径,例如:c:\Qt\5.4\msvc2013\bin。如果您的可执行文件是 64 位,请添加 64 位 Qt 二进制路径,例如:c:\Qt\5.4\msvc2013_64\binwindeployqt.exe 将从该目录复制 DLL,因此不要为 64 位可执行文件设置 32 位 Qt 二进制路径,反之亦然。如果你使用 MinGW,你也需要添加 g++.exe 路径,windeployqt 将从那里复制 lib*.dll。

    ; Example path for MSVC 32-bit
    PATH=c:\Qt\5.4\msvc2013\bin;%PATH%
    
    ; Example path for MinGW 32-bit, g++.exe is in C:\Qt\Tools\mingw491_32\bin
    PATH=C:\Qt\5.4\mingw491_32\bin;C:\Qt\Tools\mingw491_32\bin;%PATH%  
    
  3. 使用您的可执行文件作为参数运行windeployqt.exe。例如:

    windeployqt.exe C:\Qt\Examples\Qt-5.4\widgets\richtext\build-calendar-Desktop_Qt_5_4_0_MSVC2013_32bit-Debug\debug\calendar.exe
    
  4. 检查输出是否有错误或警告。以下是没有错误和警告的输出:

2。手动复制 DLL

您必须复制正确的 DLL(32 位或 64 位)。使用 Process Explorer 之类的工具来查找正确的 DLL 路径:

  1. 从 Qt Creator / Visual Studio 运行应用程序。
  2. 打开进程资源管理器。
  3. 在进程资源管理器中
    1. 点击可执行文件,例如calendar.exe
    2. Ctrl+D 在下方面板中显示加载的DLL。等效菜单为View -> Lower Panel View -> DLLs
    3. 在下方面板中,单击Path 列以按路径排序。
  4. 将 DLL 复制到可执行文件所在的目录。例如在下图中。 DLL 来自 C:\Qt\5.4\msvc2013\bin。

  1. 如果您的可执行文件使用c:\Qt\5.4\msvc2013\plugins\platforms\qwindowsd.dll 之类的内容。它也应该被复制。但从platforms 目录复制,而不是plugins。假设calendar.exe的完整路径是c:\examples\calendar.exe,那么qwindowsd.dll应该复制到c:\examples\platforms\qwindows.dll,而不是c:\examples\plugins\platforms\qwindows.dll
  2. 您还需要复制 C++ 运行时库。如果你使用mingw,可能需要复制libgcc_s_dw2-1.dlllibstdc++-6.dlllibwinpthread-1.dll 等等。检查进程资源管理器以确保。如果您使用的是 MSVC,则需要部署运行时(例如:msvcp120.dllmsvcr120.dll)。最后,你的目录结构是这样的:

    c:\examples\calendar.exe
    c:\examples\Qt5Cored.dll
    c:\examples\Qt5Widgetsd.dll
    c:\examples\Qt5Guid.dll
    c:\examples\icudt53.dll
    c:\examples\icuin53.dll
    c:\examples\icuuc53.dll
    c:\examples\libgcc_s_dw2-1.dll   (if using mingw)
    c:\examples\libstdc++-6.dll      (if using mingw)
    c:\examples\libwinpthread-1.dll  (if using mingw)
    c:\examples\platforms\qwindowsd.dll
    

【讨论】:

  • 谢谢。我应该记得我需要在旧的 VB6 项目安装程序中添加 dll,但最近没有使用 U++。我在包含 exe 的目录中添加了三个 dll 文件,现在我收到了一个无法识别的错误。请参阅我原来的问题中的图片。寻找环境。路径 dir 输入 loc。我是 QT 新手。
  • 你也可以试试部署工具。我们使用它并对它感到满意。在本页底部有描述:doc.qt.io/qt-5/windows-deployment.html
  • @RetiredNinja,感谢您的提示!添加了使用该工具的步骤。
  • 我用windeployqt 创建的安装也不能在非 qt 机器上运行。我意识到它不会将 msvcp100.dll(我正在使用的 VV2010 dll)复制到我可以通过 ProcessExplorer 看到的安装中(还有许多其他文件)。我确实通过 VC2010 IDE 启动了命令提示符,但它不会复制任何其他文件,而不是我在开始菜单 > 命令提示符中执行的操作。
  • @zadane, windeployqt 不会复制 msvcp100.dll,但它应该复制最终用户可以安装的 VC++ 可再发行安装程序(例如vcredist_x86.exe),前提是设置了VCINSTALLDIR在运行 windeployqt 之前正确。如果没有,您可以随时复制vcredist_x86.exe 自己:)
【解决方案2】:

对我来说一个简单的解决方案就是将 QTDIR C:\Qt\5.4\msvc2017_64\ 添加到您的 Windows 系统变量中。

  1. 在 Windows 搜索中,输入“env”并按“编辑系统环境变量”
  2. 按下面的“环境变量”
  3. 在系统变量列表中,按“新建...”
  4. 添加QTDIR作为变量名,值是Qt目录下编译器的目录名:C:\Qt\5.4\mingw491_32在你的情况下

【讨论】:

    【解决方案3】:

    fxam 给出的答案是深入而全面的。我已经尝试了提供的方法并且它们有效!

    添加一条注释,如果是MinGW64,应该在“C:\Qt\Qt5.13.1\5.13.1\mingw73_64\bin”目录下运行windeplyqt.exe。

    DrumM 的答案是最简单的解决方案。它已被提及为 1.2。不过在 fxam 的回答中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多