将Qt5.5 动态链接生成的exe及依赖dll打包方法

摘要:
Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。从命令行模式进入该文件夹,执行语句windeployqtxxxx.exe.之后该工具会分析程序依赖性,自动添加必要dll文件至该目录。

Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。

使用工具:

  1. Enigmavb(单文件封装工具)

下载:http://pan.baidu.com/s/1slcfArj

  1. windeployqt(qt内置一个现成的dll依赖性工具)

位置:工具在qt安装目录的bin/目录下

操作步骤:

第一步:是添加qt的bin/目录进系统path变量。很简单,在系统属性里设置,添加D:Qt5.4msvc2010_openglin;到系统path环境变量。(qt安装目录不尽相同)

第二部:在任意目录新建文件夹,把编译完成后的qt exe可执行程序拷贝过去。从命令行模式进入该文件夹,执行语句windeployqt xxxx.exe. 之后该工具会分析程序依赖性,自动添加必要dll文件至该目录。运行时命令行提示如下

D:TVSQtLGTVSerialControl>windeployqt terminal.exe --release
D:TVSQtLGTVSerialControl erminal.exe 32 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Direct dependencies: Qt5Core Qt5Gui Qt5SerialPort Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5SerialPort Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5SerialPort Qt5Svg Qt5Widgets
Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not s
et.
Updating icuin53.dll.
Updating icuuc53.dll.
Updating icudt53.dll.
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5SerialPort.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Creating directory iconengines.
Updating qsvgicon.dll.
Creating directory imageformats.
Updating qdds.dll.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
Updating qjp2.dll.
Updating qjpeg.dll.
Updating qmng.dll.
Updating qsvg.dll.
Updating qtga.dll.
Updating qtiff.dll.
Updating qwbmp.dll.
Updating qwebp.dll.
Creating directory platforms.
Updating qwindows.dll.
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_de.qm...
Creating qt_fi.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...

D:TVSQtLGTVSerialControl>

这样必要的库文件就自动添加完毕。

第三步:打包

打包工具,这里选用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

将Qt5.5 动态链接生成的exe及依赖dll打包方法第1张

将Qt5.5 动态链接生成的exe及依赖dll打包方法第2张

最后,点Process,大告成。打包生成的exe文件也可以象静态编译的一样,可以独立运行了。

参考地址:

http://blog.csdn.net/ztz0223/article/details/8939341

http://www.bubuko.com/infodetail-725364.html

免责声明:文章转载自《将Qt5.5 动态链接生成的exe及依赖dll打包方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.PHP如何打造一个高可用高性能的网站呢?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java导出成可运行Jar包 dll或者so加载失败的解决方案

正常情况下, xxx.class.getResourceAsStream(lib) 这样就可以获取到了。但是我的是在JFrame的初始化中的, 所以需要Thread.currentThread().getContextClassLoader().getResourceAsStream(lib); 这样来获取。   这个坑  找了蛮久才找到解决方案记录下。...

Side by Side Assembly介绍--manifest文件的使用

什么是Side-by-Side Assembly? Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来解决Windows平台上的DLL Hell问题。DLL Hell的介绍可以看Wikipedia的文章。简单的说,DLL Hell窘境包括了Windows应用程...

dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

自从操作系统升级到64位以后,就要不断的需要面对32位、64位的问题。相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别。同时,对于程序的dll文件应该放到System32文件夹,还是SysWow64,大部分人做的决定是,32位程序放到System32,64位程序放到SysWo...

C#如何调用C++的dll

 背景 一个项目,算法部分使用C++的openCV库编写图像处理程序,编译成dll,用户界面采用C#编写,去调用该dll暴露的接口。  C#编写的是托管代码,编译生成微软中间语言,而普通C++代码则编译生成本地机器码,这两种语言不能直接混合编程。常见的方式是: 1)将本机C++代码(指非托管C++)编译成一个dll,供C#调用,调用方法为 [DllImpo...

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

阅读目录 一、配置安装包依赖项 二、自定义dll(测试数据库连接) 三、总结 正文 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起来是相对比较简单的,只要知道了博主提供的方法,相信都不是问题,其实...

C# 反射实现动态加载程序集

原文:https://blog.csdn.net/pengdayong77/article/details/47622235 在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例。 反射提供了封装程序集、模块和类型的对象(Ty...