Qt程序打包发布
概述:
我们在开发Qt项目时,难免会遇到程序打包发布的问题。有的时候我们将程序编译生成一个程序,放到别人的电脑上就运行不起来了。这是因为别人的电脑上没有安装开发环境。其实如果我们自己讲生成的可执行程序包换个路径再打开,也许你就运行不了了。提示少了某些库。因此就设计到打包问题。将我们的可执行程序不管发到哪个路径、放到谁的电脑上,都能运行起来。那么该怎么打包程序发布呢?
步骤:
1 首先我们需要编译一个release版本的可执行程序。2 将可执行程序拷贝到一个你打包的文件夹(建议新建一个文件夹用来打包发布程序)。
3 找到电脑上windeployqt.exe的路径 (这里我的路径是在:D:\Qt\setup\5.6\mingw49_32\bin\windeployqt.exe)
4 然后建立一个脚本来执行打包。这里我建立一个run.bat,脚本中的内容为
D:\Qt\setup\5.6\mingw49_32\bin\windeployqt.exe xxx.exe
pause
注:第一行为打包工具的路径 后面跟可执行文件名字
5 接着双击run.bat就可以自动将可执行程序依赖的库打包到文件夹中了。
6 双击运行可执行程序,没问题的话就可以将文件夹压缩发布了。
注意:
运行run.bat将依赖库拷贝到文件夹后,一定要测试下。有时候windeployqt.exe也不一定能够拷贝完全。如一些第三方库,由于windeployqt.exe是Qt提供的,这些第三方库不见得能找得到。这时候需要手动将其拷贝到当前文件夹中来,还有项目中用到的动态库也需要手动拷贝到文件夹中来。
这样必要的库文件就自动添加完毕.
2.一般情况下,还是会少一两个.dll 用depends软件检测一下,看看还缺什么?
找到除了API-MS的包,在D:\QT\QT5.4.1mingw\5.4\mingw491_32\bin目录里面复制到软件的根目录。
3.前两步下来,dll彻底找完了,现在就该轮到打包工具 EnigmaVirtual Box
在“Enter Input File Name”一栏指定Qt编译生成的 *.exe 文件,同时在“EnterOutput File Name”一栏会自动生成打包后输出文件的路径和文件名称。(请无视中间的广告!)
点击左下方的“Add…”按钮,添加所有的依赖链接库文件;然后点击右下方的“FilesOptions”,在弹出的对话框里选中“Enable Files Virtualization”和“CompressFiles”两项;“OK”后返回点击“Process”并等待小伙伴干完该干的活。
在“Enter Input File Name”一栏指定Qt编译生成的 *.exe 文件,同时在“EnterOutput File Name”一栏会自动生成打包后输出文件的路径和文件名称。(请无视中间的广告!)
点击左下方的“Add…”按钮,添加所有的依赖链接库文件;然后点击右下方的“FilesOptions”,在弹出的对话框里选中“Enable Files Virtualization”和“CompressFiles”两项;“OK”后返回点击“Process”并等待小伙伴干完该干的活。
这样你就成功了。
Qt5.4 主要依赖链接库说明
1.QT模块库
1 2 3 4 |
Qt5Core.dll #QT核心库 Qt5Gui.dll #QT Gui库 Qt5Widgets.dll #QT Widgets库,QT 5中GUI程序基本都需要此dll #还有其他程序用到的Qt5XXX.dll |
2.ICU依赖库
(International Component for Unicode,Unicode工具)
1 2 3 |
icudt51.dll icuin51.dll icuuc51.dll |
3.QT插件库(新增库,路径必须正确)
1 2 3 4 5 6 |
# 根据不同的程序,需要不同的插件库 #例如 QT_DIR/plugins/*/*.dll # 需要将 platforms/*.dll,accessible/*.dll的文件结构保留 # 放在你所编译的程序所在目录 plugins/platforms/qwindows.dll plugins/accessible/qtaccessiblewidgets.dll |
4.EGL依赖库,为OpenGL,OpenGL es提供接口
1 2 |
libEGL.dll libGLESv2.dll |
5.mingw依赖库(msvc编译则无需这些库)
1 2 3 |
libgcc_s_dw2-1.dll libstdc++-6.dll libwinpthread-1.dll |
6.VC运行库(mingw编译则无需这些库)
1 2 |
msvcr110.dll(对应VS2012) msvcp110.dll |