Qt 5.0程序在QtCreator中运行但不在外部运行

时间:2013-03-22 08:44:04

标签: windows qt qt-creator

以下是上下文:

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

现在状态:

  • 我的程序在QtCreator中正常运行,但是当我在外面尝试时,我收到了一些错误。
  • 我检查了这个主题,它给了我一些答案: qtcreator - exe does work fine inside qtcreator but doesn't outside
  • 我因此添加了Qt dll并且它有所帮助,不再有缺少库消息。
  • 但是,它不会在QtCreator之外运行(没有更多错误消息,我只是没有运行)所以我添加了平台目录,其中包含 qminimal qwindows dll,它没有帮助。
  • 我还下载并添加 libEGL.dll 作为sugested,没有结果。

我被困住了,可能真的有点帮助。

3 个答案:

答案 0 :(得分:5)

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

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

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

其次是使用静态编译方法来避免这样的问题,但是对于应用程序的静态编译,如果要将它分发到目标计算机上,则需要商业许可证。

在目标计算机上部署应用程序:

1)将Microsoft Visual C++ 2010 Runtime库放在您的应用程序文件夹中,以便用户将其安装在自己的计算机上。

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

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

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

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

答案 1 :(得分:3)

Qt项目网站上有很多这样的话题。跟踪依赖关系只会告知编译时依赖性。还有动态加载的DLL,您不会收到任何错误,警告或任何错误。如果您使用库存构建DLL(不包括Qt5 * .dll),您需要的是:

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

Plus编译器运行时dll取决于您正在使用的构建版本。

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

答案 2 :(得分:0)

只需将文件qt.conf添加到您的app目录,其中包含以下内容

[路径]

库=。/平台

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

这就是全部。

这是有效的,因为qtcore.dll是使用qt安装的内部路径编译的。 (我不知道为什么!)。由于应用程序启动时ttconf始终由qtcore读取, 将包含“平台”中的图书馆,该应用程序将适用于任何主机。

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