Qt程序发布工具windeployqt.exe所带来的坑

一、使用Qt自带的发布工具:windeployqt.exe来自动查找运行时库文件,是个好办法。但是该工具有坑!并且坑很深!我在发布程序时就遇到了一个大坑!我使用该工具进行程序发布,自动查找运行时库文件,看起来比较完美,所有用到的DLL文件都准备齐全!在开发机上也能正常运行!但是发布到客户端后,却无法运行!并且报错:0xC000007b,直接一头慒!后来经过1天多的问题查找,终于搞明白了为什么会报这样的错误!
二、故障排查步骤:我首先考虑到的是Qt的依赖库出了问题!于是我就尝试在开发机上把Qt文件夹改名,因为开发机上运行是正常的,结果改名后,开发机也运行不了!心里暗自欢喜!问题终于有了线索!然后继续深订追查!把Qt文件夹名称恢复了,然后根据所用的编译器,找到编译器所在路径的bin文件夹,尝试改名,然后再次运行,结果还是无法运行,范围又缩小了!然后我就把bin文件夹中的所有dll文件全部拷贝到了应用程序的发布文件夹中,再把bin文件夹改名,再次运行,结果正常运行了,于是问题就锁定在bin文件夹的dll文件上。然后对发布文件夹中的所用到的Qt的库文件(基本都在编译器的bin文件夹中)与Qt编译器下的bin文件夹中的对应dll文件进行了对比,发现有大小不同文件存在,于是把这类文件用bin文件夹中的dll库文件替换,然后发布到客户端运行,结果正常运行!
三、发现的windeployqt.exe的问题:发现这个工具把msvc2017编译器下的bin文件夹中的Qt5OpenGL.dll和Qt5Test.dll两个文件拷贝到了发布文件夹中,我用的编译器是mingw73_64,在开发机上你试不出来,因为你的系统路径中有Qt的路径,程序会根据系统路径自动查找用到的dll文件,即便是你的发布文件夹中拷贝错了,系统也能找到对应的dll文件,但是在客户端上是没有Qt环境的,所以程序就找不到需要的dll文件了,应用程序文件夹中的dll文件又是不正确的,所以就报错了!
四、我的问题解决方法:拷贝mingw73_64\bin\Qt5OpenGL.dll和mingw73_64\bin\Qt5Test.dll到发布文件夹中即可解决。

秋风 写于淄博 业务联系与技术交流:Q375172665

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-05 21:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-05 21:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-05 21:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-05 21:06:02       18 阅读

热门阅读

  1. C++中的List

    2024-06-05 21:06:02       8 阅读
  2. x264 参考帧管理原理:i_frame_num 变量

    2024-06-05 21:06:02       10 阅读
  3. Web前端框架:深入探索与实践

    2024-06-05 21:06:02       7 阅读
  4. AndroidStudio设置允许APP获取定位权限

    2024-06-05 21:06:02       7 阅读
  5. 算法题day37日(补5.23日卡:贪心算法day4)

    2024-06-05 21:06:02       8 阅读
  6. rman reset database incarnation 重建controlfile

    2024-06-05 21:06:02       9 阅读
  7. mac 安装mvn 、node 、vue

    2024-06-05 21:06:02       10 阅读
  8. R语言数据分析15-xgboost模型预测

    2024-06-05 21:06:02       7 阅读
  9. NXP RT1060学习总结 - 基础CAN功能

    2024-06-05 21:06:02       9 阅读
  10. SpringMVC:获取请求数据

    2024-06-05 21:06:02       7 阅读