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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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)

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

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

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

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

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

这个工具也非常简单

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

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

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

最终产品:

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

参考文献:

http://hi.baidu.com/cyclone/blog/item/d77a86182fb915b84bedbc57.html

附录:关于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下,很多库有的机器有,有的没有,最好还是静态一下
goldlion(233424570) 11:27:16 

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

本文出自 “做游戏的老G” 博客,请务必保留此出处http://goldlion.blog.51cto.com/4127613/834075

上一篇:C/C++的四大内存分区 分类: C/C++ 2015-05-09 01:36 163人阅读 评论(0) 收藏


下一篇:mongo安装、备份与常见命令整理