Qt5 MinGW 版本的 windeployqt 发布

Qt 5 之后,附带的文件日益复杂,已经很难用手动拷贝dll这样的方法来整合发布程序,很依赖windeployqt这个东西。一般而言,标准用法是:

C:\Qt\5.15.2\mingw81_64\bin>windeployqt.exe --release C:\xxx\release\bars.exe

这玩意儿我用了好多年了,但由于一直用的是预编译的vc版本的Qt,没有注意过一些问题。最近用了MinGW版本的Qt,发现有一些feature需要注意:

--release标志的意思是强调这是个Release版本的程序,理论上这事儿应该是自动检测出来的,但我习惯加上。然而,MinGW版本中,如果加了--release,就会报Unable to find the platform plugin.错误然后停止,目前没有发现例外。

vc写的程序,发布时一般带一个vc++ redistribute让用户自己安装。但是,MinGW没有这个配套设施,像libgcc_s_seh-1.dll这类文件一般是自己放在exe旁边打包。

windeployqt支持自动拷贝这几个文件,前提是gcc的bin路径存在于PATH并且加了--compiler-runtime标志。

当然,作为一种良好的编程习惯,我认为一般不要将编译器或者任何一个库的bin路径加入PATH——否则早晚会被坑。这种必须要用PATH的时候,可以在命令行环境下临时设置。

Powershell环境:

$env:path+="C:\Qt\Tools\mingw810_64\bin"

CMD环境:

set PATH=%PATH%;C:\Qt\Tools\mingw810_64\bin

然后就可以大概这样调用:

C:\Qt\5.15.2\mingw81_64\bin>windeployqt.exe --compiler-runtime C:\Users\Win7VM\D ownloads\release\bars.exe

  • 最后更改: 2023/03/20 15:25