​http://goldlion.blog.51cto.com/4127613/834075​



引子

由于 AnimatePacker的打包发布用的是Qt动态编译,且为了给没有Qt环境的朋友使用,会集成一些dll,所以造成了一些不便。(策划和美术都喜欢一个exe的东西吧= =)

个人对Qt静态编译不怎么感冒,大约是因为比较折腾,所以一直没弄。

近几年各种虚拟化工具迅猛发展,易用性和稳定性越来越好。最近尝试了一下,可以用,也比较简单,所以整理一下。对于我们开发一些常用的文本工具以及游戏编辑器来说,足够用了。

注意:我的环境是指windows下,如果你在其他环境下使用,本篇末尾有一个和Qt开发群友人生如戏(921742079)的对话,可以参考。

第一步、编译你的exe

使用release模式,动态编译exe,这个没得说,正常Qt开发的操作。

第二步、获取依赖的dll

在windows下面,动态发布Qt程序,需要获取你需要的dll,然后和exe放到一起发布

有两个工具可以获取你需要的dll

工具1:Dependency Walker

打开此工具直接将你的exe拖拽进去即可,然后窗口中会显示exe依赖的dll

win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)_静态编译

优点是:他会找到发布需要最少的dll,有利于我们做体积小的发布包。

缺点是:虽然我们做程序的一般都会把path系统变量配置好。这个工具比较傻,只会在system32下找,并不能找到所有dll的真正路径。 

工具2:Process Explorer

这个工具需要你首先运行exe,然后找到exe的进程,就可看到依赖的dll了

win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)_linux_02

 优点是:他会找到所有需要的dll的路径

缺点是:会把一些加载的插件dll和其他一些非必需的dll也显示出来。

你可以选择这两个工具同时使用,或者用其中一个。

第三步、使用虚拟化工具打包压缩

本篇文章的主角出场,他叫:Enigma Virtual Box。名字很猛,翻译过来就是:英格码虚拟盒。

这个工具也非常简单

win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)_拖拽_03

操作如下:1.设置exe 2.拖拽dll到窗口 3.打开文件选项 4.启用压缩

然后我们点“执行封包”就可以了。

最终产品:

win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)_动态编译_04

附录:关于Qt个平台发布的对话 


goldlion(233424570) 11:20:04 

请教个问题

如果用Enigma Virtual Box之类的软件,打包发布Qt动态编译的共享软件,或免费软件


和静态编译相比,怎么样?


人生如戏(921742079) 11:21:18 

你指什么怎么样?

效率?

一样慢


goldlion(233424570) 11:21:32 

恩,综合考虑吧


人生如戏(921742079) 11:22:00 

放自己目录里面,没事


goldlion(233424570) 11:22:34 

我现在主要是对这两者效率差别,没有数值上的概念

哈哈


人生如戏(921742079) 11:23:19 

我试过的,一样慢

不过你要用三方的工具打包,可能会更慢一点


goldlion(233424570) 11:23:41 

是哦


人生如戏(921742079) 11:23:45 

因为三方的工具可能是用来加密的


goldlion(233424570) 11:24:57 

静态编译一般用来发布商业软件吗?对速度要求高的一般是哪些商业软件?

我只是用Qt写一些文本工具,和游戏编辑器,不接触商业发布这块东西= =


人生如戏(921742079) 11:26:03 

没太大区别

linux下,我一般静态 

windows和mac下,动态

mac下qt有打包工具

windows下么,找到dll,放一起就可以了

linux下,很多库有的机器有,有的没有,最好还是静态一下