测试环境:win11 & mingw64 & qt6_6_1
完成时间:2024/3/10
先在本机检查缺少的依赖项
- 先将可执行程序复制到一个新的目录,用于存放打包文件;
- 双击可执行程序,将会出现一些QT动态库找不到的提示弹窗;
以上3个动态库是最常见的窗体应用所依赖的:Qt6Core.dll、Qt6Widgets.dll、Qt6Gui.dll
拷贝上面三个最基础的依赖项:
进入QT安装目录,定位到编译器目录:/Qt/6.6.1/mingw_64,在bin目录下找到它们,并将它们与可执行程序放在同一级目录;
再次双击,运行:
提示缺少QT平台插件之类的,在编译器目录下,找到子目录plugins并将其拷贝到发布文件夹。
再次运行,成功。
找一台新的测试机
在集成了本地测试中发现的依赖项之后,将整个目录拷贝到独立的测试机,重复运行,又找出3个更底层的依赖项:libgcc_s_seh-1.dll、libstdc++-6.dll、libwinpthread-1.dll
补充
关于dumpbin
使用visual studio工具dumpbin,可以查看二进制的依赖项,但它并没有区分层级,将一些更底层的依赖也包含进来了,但是这些我们可能并不需要。同时,它也做不到linux环境下的ldd命令那样,提示出来是否能找到并显示其绝对路径。
关于windeployqt
左侧的目录是搜索出来的原始状态,体积大致有60多兆,右侧在一台新创建的win11虚拟机上实测出来的可用状态,体积减小到30多兆。
建议:可以将右侧这个目录,作为一个基于mingw64开发的普通程序的发布模板,后续新程序的发布,只需要在此基础上将可执行文件替换掉,并添加一些必要的新模块,就能直接打包发布了。