Qt 5.95 Windows下发布指南(mingw)

1,088 阅读2分钟

基本工作

1 在工具中将发布版本改为release

将构建配置改为Release

2 构建项目

完成后,对应的exe文件就会被放在指定的文件夹下

实际上,还会有其他文件被放入,但只有其中的exe文件是有用的

3 加入缺失的dll文件

有人说用加入环境变量的方式解决这个问题,这样固然可以。但是要在另一台电脑运行时,那台电脑也必须安装qt并加入了环境变量,这样显然是不现实的

  1. cmd进入对应发行版本的文件夹,比如我用的是mingw打包,则是在 C:\Qt\Qt5.9.5\5.9.5\mingw53_32\bin 目录下

  2. 使用其中的windeploy.exe为发行的exe文件补充上缺失的dll文件

问题解决

理论上来说,这时候我们的exe文件应该可以正常运行了,但实际上在我的机器上并不行,不知道是因为qt版本原因还是其他原因。

首先,我们打开程序,还是会提示缺失libgcc_s_dw2-1.dll文件,补上后还会提示缺失libwinpthread-1.dll这个文件。

补充上对应的文件后,程序是依然不能运行的,还出现了更加诡异的错误:

后面还会依次提示Qt5Gui.dll Qt5Core.dll等有类似问题。

这是一个十分诡异的问题,首先问题并不出在Qt的几个库dll文件上。我看到网上有的人是加入环境变量后,Qt环境变量与codeblocks环境变量冲突,然而我并没有通过编辑环境变量的方式解决之前的dll依赖问题。那么这个问题是出在哪呢?

我先在Qt Creator中把程序运行了起来,再通过Proccess Explorer中查看它所依赖的dll文件,发现实际运行环境中用到了一个我们并没有拷贝的dll文件libstdc++-6.dll将这个文件复制过来后,就可以正常打开运行了

出现问题的几个dll文件似乎都是mingw的dll文件

windeployqt构建时似乎并不会自动加入mingw依赖的dll文件

使用vs套件构建可能可以避免这个问题

参考链接

【VS开发】【Qt开发】使用process explorer查看exe调用dll的情况