1、为什么打包
有时候我们编译出来的QT程序要给别人用,那么别人的电脑上可能没有安装QT,QT版本不同,或者其他因素的影响导致运行不了我们的程序,那么就需要打包给别人,把程序运行时候需要的一些库等资源都打包在一起,这样就不需要考虑别人运行环境,因为所有的资源都打包提供了!
举例:
我这边随意编译一个QT程序,就简单的一个图像界面,编译出来的名字叫 NDDS.exe,我单独把这个程序拷贝到 NDDS_package下,运行是不成功的,因为找不到运行时需要的动态库
2、解决方案
- 使用 windows qt 自带的 windeployqt工具进行打包
- 使用 qt cmd 运行打开,因为有时候你并没有把路径添加到环境变量中去,编译器版本要看你使用的是什么,我这边是 MinGW7.3.0 64-bit的编译器
- 我这边的 windeployqt工具 路径在 D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin 下,可以把你自己的这个路径添加到环境变量中去,这样可以在任意目录下使用 windeployqt
查看 windeployqt 路径
D:\Work\Workspace\QT\NDDS_package>where windeployqt
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\windeployqt.exe
windeployqt 工具打包
D:\Qt\Qt5.14.2\5.14.2\mingw73_64>cd D:\Work\Workspace\QT\NDDS_package
D:\Work\Workspace\QT\NDDS_package>windeployqt NDDS.exe
D:\Work\Workspace\QT\NDDS_package\NDDS.exe 64 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_hangul.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_openwnn.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_pinyin.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_tcime.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Skipping plugin qtvirtualkeyboard_thai.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Direct dependencies: Qt5Core Qt5Gui Qt5SerialPort Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5SerialPort Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5SerialPort Qt5Svg Qt5Widgets
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5SerialPort.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Updating libGLESv2.dll.
Updating libEGL.dll.
Updating D3Dcompiler_47.dll.
Updating opengl32sw.dll.
Updating libgcc_s_seh-1.dll.
Updating libstdc++-6.dll.
Updating libwinpthread-1.dll.
Creating directory D:/Work/Workspace/QT/NDDS_package/iconengines.
Updating qsvgicon.dll.
Creating directory D:/Work/Workspace/QT/NDDS_package/imageformats.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
Updating qjpeg.dll.
Updating qsvg.dll.
Updating qtga.dll.
Updating qtiff.dll.
Updating qwbmp.dll.
Updating qwebp.dll.
Creating directory D:/Work/Workspace/QT/NDDS_package/platforms.
Updating qwindows.dll.
Creating directory D:/Work/Workspace/QT/NDDS_package/styles.
Updating qwindowsvistastyle.dll.
Creating D:\Work\Workspace\QT\NDDS_package\translations...
Creating qt_ar.qm...
Creating qt_bg.qm...
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_da.qm...
Creating qt_de.qm...
Creating qt_en.qm...
Creating qt_es.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_gd.qm...
Creating qt_he.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_pl.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...
Creating qt_zh_TW.qm...
这样打包后就把程序需要的动态库资源都拷贝过来了,可以直接运行 NDDS.exe 这个程序了
关于这个打包里面的东西其实有一些并没有用的上,比如 translations 语言翻译等其实不需要,还有一些动态库也没用上,但是我不建议去删除,如果非要删除可以自行分析下,如win10系统下资源监视器去看一个进程关联了哪些模块 (cmd 中输入 resmon.exe 可以直接打开),linux 系统下可以 ldd+程序名 查看
建议不删除,然后把这个目录压缩打包给别人就行了
3、打包成安装包
安装包就像你平时下载安装的程序,选择安装到哪个目录下,是否创建桌面快捷方式等,两个工具,一个是 NIS Edit,一个是Inno Setup,以 Inno Setup举例:
Inno Setup 官网:https://jrsoftware.org/isdl.php
1)、下载 innosetup-6.2.0.exe 工具安装,安装后打开工具如下图
2)、使用 innosetup 打包
- 参考下面一系列的图
上面步骤操作完后,跳到下面界面编译,如果有错误会提示,上面我特意把ico图标格式没选对
那为了演示,删除错误这行,然后再次运行
编译完成后桌面上就有了打包好的安装程序,这个程序和大家平时下载的exe安装程序一样