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

这里是上下文:

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

现在的状态:

  • 我的程序在QtCreator中运行良好,但是当我在外面尝试时,我收到了一些错误。
  • 我检查了这个问题,给了我一些答案: qtcreator – EXE在qtcreator内部工作正常,但不在外面
  • 因此,我添加了Qt dll,并且帮助,没有更多的丢失图书馆消息。
  • 不过,它不会运行在QtCreator之外(没有更多的错误消息,我只是不运行),所以我添加了qminimalqwindows DLL的平台目录,这没有帮助。
  • 我也下载并添加libEGL.dll作为sugested ,没有结果。

我卡住了,真的有一点帮助。

这是一个依赖问题,你的程序不能加载它的依赖关系,将依赖文件(DLL文件)复制到应用程序目录是一个临时的方式,这是非常危险的方式,你的应用程序可能面临目标机器的问题,如果目标机器不安装有Microsoft Runtime Library的正确版本,您的应用程序无法正常运行,您可以使用Dependency Walker查找应用程序需要的哪些依赖关系(DLL文件)。

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

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

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

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

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

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

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

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

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

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模块。

只需添加文件qt.conf到您的应用程序目录与以下内容

[路径]

库= /平台

然后复制到相同的应用程序目录,可以找到的子目录“平台”:C:\ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

就这样。

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

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