Qt程序在Windows平台下编译后,很多依赖的动态库(DLL)还需要与可执行文件(EXE)一起打包,方便其他人在没有安装Qt环境的机器上运行。本文将详细介绍Qt程序如何通过exe和dll打包的原理和具体方法。
一、打包原理
Qt程序在编译后,会产生一个exe文件,这个文件是程序的主体。但它依赖于一些动态链接库(也称为共享库)来提供Qt框架的功能。这些动态链接库以dll文件的形式存在。在运行Qt程序时,系统会加载这些dll文件,并将它们“链接”到程序中。因此,将程序与依赖的dll文件一起打包,可以让其他人在没有安装Qt开发环境的计算机上运行程序。
二、打包方法
1. 手动打包:
收集所需的dll文件,并将它们与exe置于同一目录下。以下是一些常见的Qt DLL文件(根据实际需求可增删):
- Qt5Core.dll
- QtGui4.dll/Qt5Gui.dll
- QtWidgets4.dll/Qt5Widgets.dll
此外,还需收集平台插件,一般为 platforms/qwindows.dll(或 platforms/qwindowsd.dll,根据是否为debug版本的exe)。整个目录结构大致如下:
```
MyApp/
MyApp.exe
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
platforms/
qwindows.dll
```
2. 使用windeployqt工具(推荐):
windeployqt工具可以自动找到exe文件依赖的所有dll文件,并将它们放置在合适的位置。具体步骤如下:
1) 打开Qt命令提示符或在系统命令提示符下添加Qt的bin目录到PATH环境变量
2) 在命令提示符中,输入以下命令:
```
windeployqt.exe
```
其中,
```
windeployqt.exe C:\Users\user\Desktop\MyApp\MyApp.exe
```
该命令将把所需的dll文件和相关资源复制到指定目录,完成打包。
注意事项:
- 如果需要打包32位版本的程序,确保用于打包的Qt环境和windeployqt也是32位的。同样地,对于64位版本的程序,相应的Qt环境和windeployqt也应该是64位的。
- 如果发现缺失一些非Qt的系统dll文件,请确保将这些缺失的dll文件与程序一起分发。可以到Visual Studio安装目录下的VC++ Redistributable安装包中找到它们。
通过以上方法,你可以将Qt程序一同打包,方便在其他机器上运行。