4

这是上下文:

  • 我在 Windows 7 x64 下用 Qt 开发了一个程序。
  • 我已经升级到 Qt 5.0.1、QtCreator 2.6.1、编译器 VS2010。

现在状态:

  • 我的程序在 QtCreator 中运行良好,但是当我在外面尝试时,我收到了几个错误。
  • 我检查了这个主题,它给了我一些答案: qtcreator - exe 在 qtcreator 内部运行良好,但在外部运行良好
  • 因此,我添加了 Qt dll,它有所帮助,不再有Missing Libraries消息。
  • 不过,它不会在 QtCreator 之外运行(没有更多错误消息,我只是不运行)所以我添加了带有qminimalqwindows dll 的平台目录,它没有帮助。
  • 我还按照建议下载并添加了libEGL.dll,但没有结果。

我被困住了,真的可以提供一点帮助。

4

3 回答 3

5

这是一个依赖问题,您的程序无法加载其依赖关系,将依赖文件(DLL文件)复制到应用程序目录是一种临时方式,这是一种非常危险的方式,您的应用程序可能会在目标机器上遇到问题,如果目标机器没有安装了正确版本的 Microsoft 运行时库,您的应用程序无法正常运行,您可以使用Dependency Walker找到您的应用程序需要哪些依赖项(DLL 文件)。

有两种方法可以解决这个问题:

第一个是在您的 installshield 中使用Microsoft Visual C++ 2010 运行时组件(或其他版本取决于您使用它编译的运行时库的版本),该用户可以静默安装它,或者在不使用 installshield 的情况下使用其可执行二进制文件安装,然后将 DLL 文件复制到应用程序目录并分发它。

其次是使用静态编译方法来避免此类问题,但是对于应用程序的静态编译,如果您想在目标机器上分发它,则需要商业许可证。

对于在目标机器上部署您的应用程序:

1) 将Microsoft Visual C++ 2010 Runtime Library 放入您的应用程序文件夹中,以便用户将其安装在他们的机器上。

DLL files2)从Qt's bin应用程序文件夹(bin文件夹路径:)中的文件夹复制应用程序所需的依赖项(C:\Qt\Qt5.0.2\5.0.2\msvc2010\bin)。

3)imageformatsQt's plugins应用程序文件夹中的文件夹复制文件夹(如果您在应用程序中使用任何图像资源文件)。

4)platformsQt's plugins应用程序文件夹中的文件夹复制文件夹。

Qt的插件文件夹路径:C:\Qt\Qt5.0.2\5.0.2\msvc2010\plugins\

于 2013-03-22T11:21:10.320 回答
3

Qt 项目站点充满了此类主题。跟踪依赖项只会通知编译时依赖项。还有一些动态加载的 DLL,你不会得到任何错误、警告或任何东西。如果您使用库存构建的 DLL(不包括 Qt5*.dll),您需要的是:

  • D3DCompiler_46.dll(有时是 D3DCompiler_43.dll)
  • libEGL.dll
  • libGLESv2.dll
  • icudt49.dll
  • icuin49.dll
  • icuuc49.dll
  • 平台\qwindows.dll(或任何你的操作系统)

加上编译器运行时 dll,具体取决于您使用的构建。

如果您使用桌面 OpenGL 支持而不是 ANGLE 并且没有 webkit 构建,您可以显着减少依赖关系。然后你只需要你正在使用的平台插件和 Qt 模块。

于 2013-03-22T09:45:03.513 回答
0

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

[路径]

库=./平台

然后将您可以在以下位置找到的子目录“platforms”复制到同一应用程序目录:C:\Qt\Qt5.1.1\Tools\QtCreator\bin

就这样。

这是因为 qtcore.dll 是使用 qt 安装的内部路径编译的。(我不知道为什么!)。由于 t.conf 在应用程序启动时总是由 qtcore 读取,因此“平台”中的库将被包含在内,并且该应用程序将适用于任何主机。

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

于 2013-09-08T13:25:18.170 回答