查看完整版本: [-- 将Qt 动态链接生成的exe及依赖dll打包方法 --]

QTCN开发网 -> Qt安装与发布 -> 将Qt 动态链接生成的exe及依赖dll打包方法 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

realfan 2013-03-28 17:30

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


将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 2013-03-28 18:24
你好像忘了platforms插件哦

realfan 2013-03-28 22:02
我示例用的是Qt4.8.4,没涉及到platforms插件。
但确实应该强调一下。
不知道Qt5程序,process explore能否检测到依赖platforms插件dll。
刚换的电脑,还没装Qt5,所以没试。

jdwx 2013-03-28 22:20
Qt5的程序process explore一样的好用。

hp_201111 2013-03-28 22:30
depends.exe  可以在不运行 Qt 程序的情况下 查出 Qt程序 依赖的 Dll。
当然 也能查别的  exe 程序。

彩阳 2013-03-28 22:45
不会把user32.dll、kernel32.dll一起打包吧。

计划 2013-03-29 00:00
学习一下,回头试试,谢谢分享!

realfan 2013-03-29 08:26
process explore工具,帮助我们找出依赖的dll
但打包哪些dll,是自己选择的。系统里的dll,一般不用选。

realfan 2013-03-29 08:35
depends walker也是可以的,不过好像这个工具有点老了,2006年的。
感觉有时候,找的dll不全。而且只是指出要的dll,dll文件要自己去找。
process explore在exe运行起来,更保险地指定带路径的dll。

ppdayz 2013-03-29 08:39
感谢楼主分享~很好的东西
话说。。。论坛回复的表情呢?

jeffreylee 2013-03-29 08:44
这两个工具太强悍了,非常感谢!

ppdayz 2013-03-29 09:14
另外。。Enigma Virtual Box可以选简体中文的。。。

toby520 2013-03-29 09:20
难道我要换这个工具打包了?以前用的Installshield2010 那玩意儿收费,破解版不好使

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

表情去掉了,为了使页面简洁些。

lcl_data 2013-03-29 09:31
Qt不是可以跨平台吗,那不打包系统目录里的,mac下面就无法用吧。。

uidab 2013-03-29 09:37
这是windows上的,mac下有它自己的工具。

lcl_data 2013-03-29 09:41
您的意思是自己的打包的工具 ?
那代码肯定是可以用同一份喽,对吧。

huhui1101 2013-03-29 10:07
大神啊,终于定稿qt发布问题,我是菜鸟!!!

uidab 2013-03-29 10:15
mac下有个命令可以帮你打包。macdeployqt,如果代码不涉及底层操作等都是没问题的。

逸凡 2013-03-29 11:51
这样子打包dll文件,项目会很大,有没其他的解决办法??

lcl_data 2013-03-29 12:02
谢谢版主的耐心回复。

liuweilhy 2013-03-29 21:49
在windows  7系统下,查看进程所依赖的dll,除了Process Explore外,系统自带的资源监视器也是个很好的选择。

realfan 2013-03-29 22:47
勾选了压缩选项,会小一些。我用Qt4.8.4试了一个简单对话框程序,exe加dll总共13.4M,生成的exe为5.9M
但Qt5的dll要多一些,体积也比较大,能压缩到什么水平,我还没试过。

realfan 2013-03-29 22:50
Qt跨平台是代码跨平台,不是二进制跨平台。Windows下编译的,mac是没法运行的。

rpdhunter 2013-04-01 20:02
楼主真是太伟大了

这个打包工具真好用,再也不用看到那一堆堆讨厌的DLL文件了

呆呆很呆 2013-04-01 20:17
关键是platforms

呆呆很呆 2013-04-01 20:24
第一个工具能检测platforms 正在测试第二个工具

呆呆很呆 2013-04-01 20:39
不行 可以运行 但是打开文件就出错

PS:我写的一个文本编辑器 动态连接库没问题 用了这个点打开就停止响应

dreamtdp 2013-04-16 11:28
楼主,我的QT5生成的.exe在别的电脑上运行说无法装载QTcored.dll,不知是怎么了

jdwx 2013-04-16 11:33
QTcored.dll是debug的dll,应给配置为release编译发布版。
release的dll没有d,如:QtCore.dll

realfan 2013-04-16 13:23
你给别人程序,也要给个release版呀。
debug的当然也没问题,就是注意dll也要选debug版的,如jdwxr所说

dreamtdp 2013-04-17 09:44
用release的也不行,还是没有QtCore.dll,是不是和qt5有关系哈

jdwx 2013-04-17 09:52
要按照楼主的办法,找到所有的dll,和exe一起copy到其它的机器上,还要有编译器的dll(VC和mingw)
一个空的Qt5GUI程序要下面的这些dll



dreamtdp 2013-04-17 09:58
按楼主的来生成.exe,我只拷贝.exe文件到其实电脑上运行,我的QT5编译器是MINGGW的,按你说的其它电脑没MINGGW是不能运行?

jdwx 2013-04-17 09:59
不需要安装mingw,只要带上dll。

200300969 2013-04-18 01:29
platforms的插件怎么打包?涉及到文件夹的……位置会乱么

nandaoruguo 2013-04-24 16:02
win732平台 QT5.0.2 使用Process Explore + Enigma Virtual Box 寻找DLL和打包发布OK
特地回复来感谢

luck__y 2013-04-28 21:35
为什么按照楼主的方法做完后,在其他电脑上运行还是会提示缺少QtCore5.dll呀,被这个问题都折磨死了。。。

weiwei22844 2013-05-22 19:14
个人感觉depends.exe比较难用,有时候查看出来的结果不准,会漏掉依赖库,还是Process Explorer好用,很早就知道这个工具了,只是不知道它还能查看依赖库,呵呵,楼主V5!

qingxp9 2013-07-06 00:09
感谢 能发给别人用了 。
另提示,平台插件放在 platforms 文件夹里
否则有Microsoft Visual C++ Runtime Library 错误

天下无雪 2013-07-30 22:21
可以去depends的官网下载,最新的2.2都支持win8了,你说的2006太古董了

weiwei22844 2013-08-02 09:19
新的depends也下载了,感觉还是不如楼主推荐的工具好用,呵呵!

jdwx 2013-08-02 20:04
depends会找不全。

天下无雪 2013-08-02 22:15
呵呵,这个各有所爱把,从VC6开始就一直使用depends

fyf350232349 2016-07-14 14:04


查看完整版本: [-- 将Qt 动态链接生成的exe及依赖dll打包方法 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled