【问题标题】:How to run Qt 5 applications on other computers (Windows 7)如何在其他计算机上运行 Qt 5 应用程序 (Windows 7)
【发布时间】:2013-04-18 09:31:58
【问题描述】:

我在 Windows 7 Ultimate 上使用 Qt 5.0.2 开发了一个简单的应用程序。作为编译器,QtCreator 使用了 MSVC2012_64bit。而且我无法将我的应用程序移动到其他计算机上。这是行不通的。 Qt 应用程序需要我找不到的 DLL。依赖资源管理器认为没有找到下面的.dlls。我在哪里可以找到它们?为什么这个问题如此广泛传播?所有的人都抱怨他们不能让他们的.exe,这是用Qt开发的,在其他计算机上工作。

EDIT1:顺便说一句,当我添加从互联网下载的DCOMP.dll 时,未找到的 dll 变成现在的 2-3 倍 :)

EDIT2:另外请注意,在其他计算机(Windows 7 Home Premium)上,当我双击 exe 文件时,它显示它已加载并且没有任何效果,完全没有错误。

【问题讨论】:

  • 所以它在您的计算机上运行?为什么不使用 Process Explorer 来获取在运行时加载的所有 DLL 的列表?
  • 是的,当然!但是我无法在其他计算机上启动exe。而且我在计算机的任何地方都找不到这些 dll。好奇怪。
  • 为什么不使用 Process Explorer 来获取运行时加载的所有 DLL 的列表?比如,当您在您的计算机上 启动您的程序时,它大概在哪里工作。我的意思是,在您的计算机上安装 Process Explorer,然后执行此操作。另外,MSVC 没有打印出所有加载的库,比如那些消息'rundll32.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file
  • 我已经安装了进程浏览器。查看哪些 dll 及其加载位置有何帮助?
  • 好的,好的,我找到了。 Ctrl+D。但是那些 dll 大约有 50 个 :(

标签: c++ windows qt dll windows-7-x64


【解决方案1】:

这是我需要的 dll 列表,我还复制了 C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms 文件夹:

就这样,它对我有用。顺便说一句,我将 Windows 7 Ultimate 64x 和 Qt 5.0.2 用于 Qt 的 Windows 32 位(MinGW 4.7、650 MB)包。

编辑:您可能还需要复制 QtCreator 的 .dll,并且您可能需要一个名为 qt.conf 的文件,其中包含以下内容(从 @Renato 答案复制):

[Paths]

Libraries=./platforms

【讨论】:

    【解决方案2】:

    只需将qt.conf 文件添加到您的应用程序目录中,内容如下

    [Paths]
    
    Libraries=./platforms
    

    然后将您将在 C:\Qt\Qt5.1.1\Tools\QtCreator\bin 目录中找到的子目录“平台”复制到同一个应用程序目录

    就是这样。

    这解决了,因为 qtcore.dll 是使用 qt 安装的内部路径编译的。 (我不知道为什么!)。因为,当应用程序启动时,qtcore 始终会读取 qt.conf,因此将包含“平台”中的库,并且该应用程序可以在任何主机上运行。

    警告:qtcore 和平台子目录必须来自同一个 qt 安装。

    抱歉,英语很抱歉,但解决方案可以正常工作。

    【讨论】:

    • 你拯救了我的夜晚,谢谢。拜托,总有一天会接受一只熊。
    【解决方案3】:

    感谢大家的帮助!

    对我来说,只是将qwindows.dll 添加到/platforms 目录并没有解决问题。
    通过直接将整个 plugins 目录复制到我的应用程序的二进制目录并创建一个包含以下内容的 qt.conf 文件,我终于让一切正常工作:

    [Paths]
    Plugins=./plugins
    

    【讨论】:

      【解决方案4】:

      现在的 Qt(至少从 Qt 5.2 开始,如果不是更早的话)附带“windeployqt.exe”,当指向您编译的程序时(如果像我一样使用它们,作为附加参数Qt Quick 程序的“--qmldir path/to/QML/files”)应该将所有必需的 DLL 输出到与编译程序当前所在的目录相同的目录中。因此,例如,对于我自己在本地构建机器上,我运行了以下内容:

          windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release
      

      这是使用 Qt 5.5 在我的 $PATH 中的 Qt \bin 目录(或者,我猜在 Windows 用语中,%PATH% ;))使用 Qt 5.5,尽管我在 5.2 和 5.3 中也做了同样的事情。

      IIRC 如果使用 MSVC 作为编译器,我仍然需要手动复制这些 DLL(在我的情况下是 msvc2010,因此是 msvcp100.dll 和 msvcr100.dll),但我可能记错了。

      【讨论】:

      • windeployqt 应该在您的输出文件夹中创建一个可以在目标系统上运行的 vcredist_x86.exe。这是处理丢失的 msvc100.dll 文件等的首选方法(因为手动复制这些文件是不受欢迎的)。 ---- 另外,如果您希望将一组更简洁的代码移至新系统,您可以将 yourapp.exe 文件单独移至新文件夹并在其上运行 windeployqt ,这应该只引入您实际需要的文件在另一台计算机上
      • 使用 MVC++ 2015,windeployqt 不会生成 vcredist_x86.exe 或 vcredist_x64.exe 文件!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      相关资源
      最近更新 更多