Rumah > Soal Jawab > teks badan
一、问题点:我在Qt5.3.1上开发完一个应用程序后,在开发机上运行良好,当我部署到其他机器时(release版本发布)弹出如下图错误后崩溃:
二、已采取应对措施
1、复制所需的*.dll(Qt5Core.dll...)到应用程序同一目录;
2、复制platforms目录到应用程序同一目录;
3、复制libEGL.dll,libGLESv2.dll,D3DCompiler_43.dll到应用程序同一目录。
三、应用程序机构图
注:图中hellworld.exe为测试程序,能正常运行,crm.exe为发布程序不能正常运行。
四、寻求帮助
请问还有哪些可能的因素会造成此问题,分别有哪些解决办法,谢谢不吝指教!
巴扎黑2017-04-17 14:03:03
您的图像,我也看不到,一直处于加载状态。关于Qt开发,本人,简单说一下,
Qt的版本号一般是三位数字,建议在选择版本的时候,选择大的版本。比如:4.8.0、5.0.0、5.3.0、5.7.0...最后一个数字尽量为0.这样的版本来说,相对于其他末尾非零数字的比较稳定吧。题主选的5.3.1,个人感觉不太好,但此次您的问题不在这儿。
以下方法本人经过测试,觉得是比较方便可行的,如果不行,请参考他人方案。
其实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。
怪我咯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一个个放到程序同一目录,慢慢排查。
大家讲道理2017-04-17 14:03:03
除了楼上说的 windeployqt,还可以用【dependency walker】看生成的 exe 的 dll 依赖,然后把所有的 dll 都拷贝了就好。