• 27597阅读
  • 44回复

[共享]将Qt 动态链接生成的exe及依赖dll打包方法 [复制链接]

上一主题 下一主题
离线realfan
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-28
— 本帖被 XChinux 执行加亮操作(2013-04-26) —

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


具体步骤:
一,先动态编译链接,生成exe文件
二,找到依赖的dll文件
这里,我们可以用Process Explore来获取所依赖的dll文件
下载:http://pan.baidu.com/share/link?shareid=1820917417&uk=673227135
打开procexp.exe,通过菜单View==》Lower Pane View==》DLLs  勾选,显示dll窗口



这里,我们以test.exe为例,在Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。
系统目录下的,一般不用关心,按Path排序,看Qt目录及mingw目录下的,将这些dll拷贝出来,单独放到一个目录下。


三,打包
打包工具,这里选用Enigma Virtual Box,
下载:http://pan.baidu.com/share/link?shareid=1837762045&uk=673227135
安装,运行

Enter Input File Name中,选择exe
Enter Output File Name,输出文件名称
点Add按钮,将前面准备好的dll文件,添加进来
点Files Options,勾选Enable Files Virtualization和Compress files,OK
最后,点Process,大告成。打包生成的exe文件也可以象静态编译的一样,可以独立运行了。






离线roywillow

只看该作者 1楼 发表于: 2013-03-28
你好像忘了platforms插件哦
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线realfan

只看该作者 2楼 发表于: 2013-03-28
回 1楼(roywillow) 的帖子
我示例用的是Qt4.8.4,没涉及到platforms插件。
但确实应该强调一下。
不知道Qt5程序,process explore能否检测到依赖platforms插件dll。
刚换的电脑,还没装Qt5,所以没试。
离线jdwx

只看该作者 3楼 发表于: 2013-03-28
回 2楼(realfan) 的帖子
Qt5的程序process explore一样的好用。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hp_201111

只看该作者 4楼 发表于: 2013-03-28
depends.exe  可以在不运行 Qt 程序的情况下 查出 Qt程序 依赖的 Dll。
当然 也能查别的  exe 程序。
离线彩阳

只看该作者 5楼 发表于: 2013-03-28
不会把user32.dll、kernel32.dll一起打包吧。
上海Qt开发联盟,热忱地欢迎你的加入!
离线计划

只看该作者 6楼 发表于: 2013-03-29
学习一下,回头试试,谢谢分享!
好好学习,天天向上。
离线realfan

只看该作者 7楼 发表于: 2013-03-29
回 5楼(彩阳) 的帖子
process explore工具,帮助我们找出依赖的dll
但打包哪些dll,是自己选择的。系统里的dll,一般不用选。
离线realfan

只看该作者 8楼 发表于: 2013-03-29
回 4楼(hp_201111) 的帖子
depends walker也是可以的,不过好像这个工具有点老了,2006年的。
感觉有时候,找的dll不全。而且只是指出要的dll,dll文件要自己去找。
process explore在exe运行起来,更保险地指定带路径的dll。
离线ppdayz

只看该作者 9楼 发表于: 2013-03-29
感谢楼主分享~很好的东西
话说。。。论坛回复的表情呢?
离线jeffreylee

只看该作者 10楼 发表于: 2013-03-29
回 楼主(realfan) 的帖子
这两个工具太强悍了,非常感谢!
离线ppdayz

只看该作者 11楼 发表于: 2013-03-29
另外。。Enigma Virtual Box可以选简体中文的。。。
在线toby520

只看该作者 12楼 发表于: 2013-03-29
难道我要换这个工具打包了?以前用的Installshield2010 那玩意儿收费,破解版不好使
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线XChinux

只看该作者 13楼 发表于: 2013-03-29
引用第9楼ppdayz于2013-03-29 08:39发表的  :
感谢楼主分享~很好的东西
话说。。。论坛回复的表情呢?

表情去掉了,为了使页面简洁些。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线lcl_data
只看该作者 14楼 发表于: 2013-03-29
Qt不是可以跨平台吗,那不打包系统目录里的,mac下面就无法用吧。。
离线uidab

只看该作者 15楼 发表于: 2013-03-29
回 14楼(lcl_data) 的帖子
这是windows上的,mac下有它自己的工具。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线lcl_data
只看该作者 16楼 发表于: 2013-03-29
回 15楼(uidab) 的帖子
您的意思是自己的打包的工具 ?
那代码肯定是可以用同一份喽,对吧。
离线huhui1101

只看该作者 17楼 发表于: 2013-03-29
大神啊,终于定稿qt发布问题,我是菜鸟!!!
离线uidab

只看该作者 18楼 发表于: 2013-03-29
回 16楼(lcl_data) 的帖子
mac下有个命令可以帮你打包。macdeployqt,如果代码不涉及底层操作等都是没问题的。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线逸凡
只看该作者 19楼 发表于: 2013-03-29
这样子打包dll文件,项目会很大,有没其他的解决办法??
离线lcl_data
只看该作者 20楼 发表于: 2013-03-29
回 18楼(uidab) 的帖子
谢谢版主的耐心回复。
离线liuweilhy

只看该作者 21楼 发表于: 2013-03-29
回 楼主(realfan) 的帖子
在windows  7系统下,查看进程所依赖的dll,除了Process Explore外,系统自带的资源监视器也是个很好的选择。
离线realfan

只看该作者 22楼 发表于: 2013-03-29
回 19楼(逸凡) 的帖子
勾选了压缩选项,会小一些。我用Qt4.8.4试了一个简单对话框程序,exe加dll总共13.4M,生成的exe为5.9M
但Qt5的dll要多一些,体积也比较大,能压缩到什么水平,我还没试过。
离线realfan

只看该作者 23楼 发表于: 2013-03-29
回 14楼(lcl_data) 的帖子
Qt跨平台是代码跨平台,不是二进制跨平台。Windows下编译的,mac是没法运行的。
离线rpdhunter

只看该作者 24楼 发表于: 2013-04-01
楼主真是太伟大了

这个打包工具真好用,再也不用看到那一堆堆讨厌的DLL文件了
离线呆呆很呆
只看该作者 25楼 发表于: 2013-04-01
关键是platforms
离线呆呆很呆
只看该作者 26楼 发表于: 2013-04-01
第一个工具能检测platforms 正在测试第二个工具
离线呆呆很呆
只看该作者 27楼 发表于: 2013-04-01
不行 可以运行 但是打开文件就出错

PS:我写的一个文本编辑器 动态连接库没问题 用了这个点打开就停止响应
离线dreamtdp
只看该作者 28楼 发表于: 2013-04-16
楼主,我的QT5生成的.exe在别的电脑上运行说无法装载QTcored.dll,不知是怎么了
离线jdwx

只看该作者 29楼 发表于: 2013-04-16
回 28楼(dreamtdp) 的帖子
QTcored.dll是debug的dll,应给配置为release编译发布版。
release的dll没有d,如:QtCore.dll
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线realfan

只看该作者 30楼 发表于: 2013-04-16
回 28楼(dreamtdp) 的帖子
你给别人程序,也要给个release版呀。
debug的当然也没问题,就是注意dll也要选debug版的,如jdwxr所说
离线dreamtdp
只看该作者 31楼 发表于: 2013-04-17
回 29楼(jdwx) 的帖子
用release的也不行,还是没有QtCore.dll,是不是和qt5有关系哈
离线jdwx

只看该作者 32楼 发表于: 2013-04-17
回 31楼(dreamtdp) 的帖子
要按照楼主的办法,找到所有的dll,和exe一起copy到其它的机器上,还要有编译器的dll(VC和mingw)
一个空的Qt5GUI程序要下面的这些dll


发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dreamtdp
只看该作者 33楼 发表于: 2013-04-17
回 32楼(jdwx) 的帖子
按楼主的来生成.exe,我只拷贝.exe文件到其实电脑上运行,我的QT5编译器是MINGGW的,按你说的其它电脑没MINGGW是不能运行?
离线jdwx

只看该作者 34楼 发表于: 2013-04-17
回 33楼(dreamtdp) 的帖子
不需要安装mingw,只要带上dll。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线200300969

只看该作者 35楼 发表于: 2013-04-18
platforms的插件怎么打包?涉及到文件夹的……位置会乱么
离线nandaoruguo
只看该作者 36楼 发表于: 2013-04-24
win732平台 QT5.0.2 使用Process Explore + Enigma Virtual Box 寻找DLL和打包发布OK
特地回复来感谢
离线luck__y

只看该作者 37楼 发表于: 2013-04-28
为什么按照楼主的方法做完后,在其他电脑上运行还是会提示缺少QtCore5.dll呀,被这个问题都折磨死了。。。
离线weiwei22844

只看该作者 38楼 发表于: 2013-05-22
个人感觉depends.exe比较难用,有时候查看出来的结果不准,会漏掉依赖库,还是Process Explorer好用,很早就知道这个工具了,只是不知道它还能查看依赖库,呵呵,楼主V5!
离线qingxp9
只看该作者 39楼 发表于: 2013-07-06
感谢 能发给别人用了 。
另提示,平台插件放在 platforms 文件夹里
否则有Microsoft Visual C++ Runtime Library 错误
快速回复
限100 字节
 
上一个 下一个