为什么我的QT应用程序不起作用?

时间:2013-01-17 00:02:36

标签: qt executable qt5

我在Windows 7 64位上使用Qt Creator构建了一个Qt 5应用程序(使用msvc 2010)。 该应用程序在我的计算机上运行完美,但在其他计算机上无法运行。

我将 Dependency Walker 中显示为缺失的所有.dll复制到程序文件夹中,没有错误,但应用程序不会运行。

我在Windows XP和Windows 7 64和32位上测试过它。
我能做些什么才能找出问题所在?

更新:我安装了Qt 4.8.4(vs 2008)和msvc 2008 express并且我编译了它并且它在其他计算机上运行,​​具有Qt4的.dll。 也许有人知道Qt5的问题......

5 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。

您需要在可执行文件目录中包含包含qwindows.dll和qminimal.dll的“platform”目录。您可以在“plugins”文件夹下找到该目录。

如果你不添加它,你的应用程序似乎会加载然后退出并返回代码0. Dependency walker无法帮助你,因为DLL是延迟加载的。

答案 1 :(得分:3)

我遇到了同样的问题 - 我添加了Dependency Walker报告的所有DLL,但我的程序立即退出,运行时没有出现错误消息。

我将libEGL.dll添加到程序目录中,现在它正常运行。

我猜测libEGL.dll是由其他DLL之一动态加载的 - 可能是libGLESv2.dll,基于所有已知依赖项,它具有最相似的名称(!) - 和动态加载不是Dependency Walker可以检测到的。

答案 2 :(得分:1)

我也遇到了同样的问题,并了解到MinGW GCC 4.7与此this post的Qt 5.0及以上版本不兼容。我采取了与你相同的方法,并切换到Qt Creator 4.8,它有效。

答案 3 :(得分:0)

我也遇到了同样的问题并尝试了两个DLL丢失消息& Dependency Walker,它没有帮助我或我不知道我是否正确使用它。以下方法帮助我解决了(对于给定的场景)。这种方法适用于一些最小的情况。

<强>方案

  1. QT Creator 3.3.2
  2. QT 5.4.1(MSVC 2010,32位),Windows 8.1操作系统
  3. 不使用动态加载dll&#39;
  4. 没有使用第三方dll&#39;
  5. 这是一个QTWidget应用程序。
  6. 方法(试用套件MinGW 32位和MSVC2012 OpenGL 32位)

    1. 构建应用程序后获取发行版exe。复制并粘贴到我们想要的另一个文件夹(假设为Z:\ abc)
    2. 转到Qt工具包(MinGW OR MSVC)安装文件夹(在我的情况下:Z:\ Qt \ 5.4 \ mingw491_32(或)Z:\ Qt \ 5.4 \ msvc2012_opengl)
    3. 搜索* .dll
    4. 复制所有DLL并将其粘贴到exe放置的文件夹中。那是(z:\ abc)
    5. 运行应用程序(在我的情况下,它正确启动)。
    6. 运行应用程序时,删除所有复制的DLL文件。

      6.1)删除时,windows会显示DLL文件的提示     应用程序(正在使用的文件)使用,因为最初加载了这些DLL。保留这些文件。

      6.2)其他DLL文件将按照我们的要求删除。

    7. 关闭应用程序并重新打开它(在我的情况下,它正确启动)。
    8. 所以我们得到了所需的DLL&#39;
    9. 这不是一种正确的方法,但在某些情况下可能会有所帮助。

      注意

      复制所有DLL时,在获取文件已存在的消息时,请按系统决定将这两个文件保存为不同的名称。如果应用程序不运行,那么我们可以尝试使用这些重命名的文件。

答案 4 :(得分:0)

我认为它必须是一些DLL,您需要将其放置在与可执行文件相同的目录中,甚至可能放在PATH中的目录中。无论哪种方式,我也正在使用Qt5,并且遇到与您相同的问题如果,我没有将它们与我的exe文件放在同一目录中:

  • vcruntime140 [d] .dll(一个MSVC库)
  • ucrtbase [d] .dll(另一个MSVC库-我正在使用MSVC / Visual C ++)
  • Qt5Widgets [d] .dll(Qt 5库)
  • Qt5Svg [d] .dll(另一个Qt 5库)
  • Qt5PrintSupport [d] .dll(另一个Qt 5库)
  • Qt5Gui [d] .dll(您猜对了)
  • Qt5Core [d] .dll(是)
  • msvcp150 [d] .dll(我相信另一个Microsoft可再发行)

当然,您可能没有使用我正在使用的任何Qt库,在这种情况下,您将不需要它们。此外,您可能具有调用不同DLL的不同工具链,但是我认为的想法是相同的,此外,也许您的设置与我的相同。

我在每个这些库的末尾都附加了一个[d],因为对于调试版本,它们的末尾都有一个d,但是对于发行版本,则没有。该部分在您的计算机上可能相同,也可能不同。我相信这是一个设置或一组设置。