前言
我们通过QT编译生成的exe有时候因为一些依赖库问题,需要添加相关的动态链接库才能运行在其它电脑。所以,当我们传递运行程序给其它人使用时:一种方式是打包成安装包的形式,需要用户在机器安装执行程序;另外一种方式是绿色安装包的形式,也就是文件夹中包含了所有依赖的动态链接库。第一种方式对于一些小的软件来说,比较麻烦,复杂。第二种方式又显得文件多,误删之后可能导致不能运行等问题。 为了方便传递给其它人使用,下面将会介绍一种将执行程序和动态链接库打包成一个运行程序的方法。
本文主要针对Qt编译环境下的打包问题,如果使用VS,可以参考我的另一篇文章《Visual Studio如何实现.exe免安装免DLL运行[动态链接库—>>>静态链接库]》,配置完成后编译生成的执行程序即可直接运行。
一. 获取依赖动态链接库
1. 添加环境变量
添加qt的bin/目录进系统path变量。很简单,在系统属性里设置,添加C:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin;或者C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin;(或者msvc路径)到系统path环境变量。(qt安装目录不尽相同)
2. 获取DLL
使用工具:windeployqt(qt内置一个现成的dll依赖性工具)
获取位置:在qt安装目录的bin/目录下
在任意目录新建文件夹,把编译完成后的qt exe可执行程序拷贝过去。从命令行模式进入该文件夹,执行语句windeployqt xxxx.exe. 之后该工具会分析程序依赖性,自动添加必要dll文件至该目录。
二. 打包
尝试在文件夹中运行执行程序,确保依赖的dll全部获取到当前文件夹下。
打包工具:Enigma Virtual Box(free)
获取位置:http://enigmaprotector.com/assets/files/enigmavb.exe
步骤:
- Enter Input File Name中,选择编译完成后的qt exe可执行程序;
- Enter Output File Name,输出文件名称;
- 点Add按钮,将前面准备好的dll文件,添加进来;
- 点Files Options,勾选Enable Files Virtualization和Compress files,OK;
- 点Process。打包生成的exe文件也可以像静态编译的一样,可以独立运行了。
主要依赖库补充说明
- QT模块库
- Qt5Core.dll #QT核心库
- Qt5Gui.dll #QT Gui库
- Qt5Widgets.dll #QT Widgets库,QT 5中GUI程序基本都需要此dll
- 还有其他程序用到的Qt5XXX.dll
- QT插件库(新增库,路径必须正确)
- 根据不同的程序,需要不同的插件库
- 例如 QT_DIR/plugins//.dll
- 需要将 platforms/.dll,accessible/.dll的文件结构保留
- 放在你所编译的程序所在目录
- plugins/platforms/qwindows.dll
- plugins/accessible/qtaccessiblewidgets.dll
- EGL依赖库,为OpenGL,OpenGL es提供接口
- libEGL.dll
- libGLESv2.dll
- mingw依赖库
- libgcc_s_dw2-1.dll
- libstdc+±6.dll
- libwinpthread-1.dll