Qt 是跨平台图形界面应用开发的强大工具,功能全面、开发高效。然而,当你开发完成一个程序,准备发布给别人时,可能会遇到一个熟悉的“惊悚场景”:
✅ 在你电脑上运行良好
❌ 发给别人,打不开、报错、缺 DLL……
为什么会这样?如何优雅地把 Qt 程序打包发布出去,让它能在任何 Windows 电脑上稳定运行?本文将系统讲解 Qt 程序打包的完整流程,包括:
为什么单独的 .exe 文件跑不了?如何使用 windeployqt 自动打包 Qt 依赖?如何处理 GStreamer、OpenSSL 等第三方库?
一、问题本质:你的程序“缺零件”
Qt 程序在编译时是动态链接的:也就是说,虽然你生成了一个 .exe 文件,但它运行时会去找一堆 .dll 动态链接库,例如:
Qt 自身的库(如 Qt6Core.dll, Qt6Widgets.dll)Qt 插件(如图像格式、平台支持)编译器运行时(如 vcruntime140.dll)第三方依赖(如 GStreamer)
这些 DLL 并不会自动嵌入到你的 .exe 中,因此如果你没有将它们一起打包发布,程序在别的电脑上运行时就会“缺零件”而崩溃。
二、详细打包流程
1、在Qt编译器中点击项目,你就会看到Qt程序的编译路径,确定 Qt Creator 中使用 Release 模式编译,不要用 Debug,编译好后,根据路径信息,找到.exe可执行文件进行复制。
2、新建一个空白文件夹,将刚刚复制到的.exe文件拷贝进空白文件夹。
3、根据第一步项目编译路径信息,选择对应的qt编译套件,进入bin目录下,使用自带的打包工具windeployqt + 存放.exe文件夹目录名进行打包。
4、如果你的程序除了 Qt,还使用了其他第三方库,比如:
GStreamer(视频播放)
OpenSSL(HTTPS 通信)
OpenCV、FFmpeg 等
那么,你还需要手动复制这些库的运行时 DLL 文件,并保证路径正确。
以 GStreamer 为例:
安装完整的 GStreamer(包括 runtime + plugins)
找到其 bin/, lib/, share/ 目录
复制到你的程序文件夹中(或指定运行路径)
确保 PATH 包含 GStreamer 的 bin,或通过代码 setenv() 设置
5、双击运行,如果缺少.dll文件,那么根据.pro文件,查找相应的驱动文件。
***注意:有时因为我们电脑比较智能,即使打包文件缺少相应的驱动,其依然额能够自动运行,因此如果是发给比较重要的客户,我们可以安装一个windows虚拟机,将打包文件传输进虚拟机进行测试,如果依然可以运行,那么则表明该程序打包是成功的。