>  Q&A  >  본문

c++ - Qt发布程序出错

一、问题点:我在Qt5.3.1上开发完一个应用程序后,在开发机上运行良好,当我部署到其他机器时(release版本发布)弹出如下图错误后崩溃:

二、已采取应对措施
1、复制所需的*.dll(Qt5Core.dll...)到应用程序同一目录;
2、复制platforms目录到应用程序同一目录;
3、复制libEGL.dll,libGLESv2.dll,D3DCompiler_43.dll到应用程序同一目录。

三、应用程序机构图

注:图中hellworld.exe为测试程序,能正常运行,crm.exe为发布程序不能正常运行。

四、寻求帮助
请问还有哪些可能的因素会造成此问题,分别有哪些解决办法,谢谢不吝指教!

黄舟黄舟2764일 전532

모든 응답(3)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 14:03:03

    您的图像,我也看不到,一直处于加载状态。关于Qt开发,本人,简单说一下,

    Qt开发版本选择

    Qt的版本号一般是三位数字,建议在选择版本的时候,选择大的版本。比如:4.8.0、5.0.0、5.3.0、5.7.0...最后一个数字尽量为0.这样的版本来说,相对于其他末尾非零数字的比较稳定吧。题主选的5.3.1,个人感觉不太好,但此次您的问题不在这儿。

    Qt win 应用程序的发布

    以下方法本人经过测试,觉得是比较方便可行的,如果不行,请参考他人方案。
    其实Qt的应用程序的发布很简单,这么好的框架,Qt肯定考虑到怎么方便的发布程序。

    题外话

    Qt一次编写,多地编译发行,实现了他的跨平台性。不同的平台除了一些特殊的库以外,几乎使用的都是Qt的库。发布的程序不能运行,多数都是库的不完整性造成的。由于开发机器上已经配置了Qt的环境路径,所以在文件夹下直接运行,不会出错。但是纯净的机器,就很容易出错。多数是缺少Qt库文件。

    windeployqt

    这是Qt官方自带的一个小程序,从名字可以看出win deploy(发布) qt.

    使用方法

    1.release您的程序;
    2.进入release文件夹下,除了可执行的程序外,其他都删除,没有用
    3.win下,按住shift键,鼠标右键,选择在此处打开命令窗口
    4.Qt环境路径先配置。直接敲打windeployqt my.exe,回车
    5.查看您的release文件,多了好多文件,把整个文件夹拷贝到,干净的机器上,程序完美运行;
    5.经过以上步骤,还不能运行的,请查看rp

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 14:03:03

    不知是我网络还是SF自身原因,目前暂时看不到你的图片(无限loading)。
    在Windows下发布的话,根据你.pro项目文件里面的"QT += ",这行所有的相关dll都要拷贝。
    比如QT += core gui network opengl widgets需要拷贝:

    Qt5Core.dll
    Qt5Gui.dll
    Qt5Network.dll
    Qt5OpenGL.dll
    Qt5Widgets.dll
    libEGL*.dll #这个是OpenGL依赖的,不用OpenGL可无视。

    然后根据你的编译器(MSVC或者MinGW),还要拷贝相关的dll,具体依赖的dll可以用Dependency Walker这个软件查看。
    最后是platform的Windows目录,也许只需要qwindows.dll就可以了。
    把dll一个个放到程序同一目录,慢慢排查。

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:03:03

    除了楼上说的 windeployqt,还可以用【dependency walker】看生成的 exe 的 dll 依赖,然后把所有的 dll 都拷贝了就好。

    회신하다
    0
  • 취소회신하다