当前位置:首页 > Windows程序 > 正文

Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件

2021-03-18 Windows程序

@126/blog/static/1582209320132291718389/

最近做了个qt的程序,但是发布程序比较困难,因为qt5有着比较多的dll,如下两篇详述了qt dll依赖库,以及如何查询自己工程所用的dll及打包发布的方法。

QT 5的依赖链接库变得更多了,摸索许久,又查阅了一些资料,总结出以下QT 5程序所依赖的库。

一、依赖库一览 1.QT模块库

1

2

3

4

 

Qt5Core.dll      #QT核心库

Qt5Gui.dll       #QT Gui库

Qt5Widgets.dll   #QT Widgets库,QT 5中GUI程序基本都需要此dll

#还有其他程序用到的Qt5XXX.dll

 

2.ICU(International Component for Unicode,Unicode工具)依赖库

1

2

3

 

icudt49.dll     

icuin49.dll    

icuuc49.dll   

 

3.QT插件库,Qt新增,有点坑爹,路径必须正确

1

2

3

4

5

6

 

# 根据不同的程序,需要不同的插件库

#例如 QT_DIR/plugins/*/*.dll

# 需要将 platforms/*.dll,accessible/*.dll的文件结构保留

# 放在你所编译的程序所在目录

plugins/platforms/qwindows.dll

plugins/accessible/qtaccessiblewidgets.dll

 

4.EGL依赖库,为OpenGL,OpenGL es提供接口

1

2

 

libEGL.dll

libGLESv2.dll

 

5.mingw依赖库(msvc编译则无需这些库)

1

2

3

 

libgcc_s_sjlj-1.dll

libstdc++-6.dll

libwinpthread-1.dll

 

6.VC运行库(mingw编译则无需这些库)

1

2

 

msvcr110.dll(对应VS2012)

msvcp110.dll

 

二、文件结构

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

 

--platforms

       --qwindows.dll

       --*.dll

--accessible

       --qtaccessiblewidgets.dll

       --*.dll

--(other plugin folder)

       --*.dll

--yourApp.exe

--Qt5Core.dll

--Qt5Gui.dll     

--Qt5Widgets.dll

--icudt49.dll     

--icuin49.dll    

--icuuc49.dll

--libEGL.dll

--libGLESv2.dll

--libgcc_s_sjlj-1.dll(mingw)

--libstdc++-6.dll(mingw)

--libwinpthread-1.dll(mingw)

--msvcr110.dll(msvc)

--msvcp110.dll(msvc)

 

三、总结

说实话,QT 5虽然有了ICU,Open GL的支持,还有c++11的支持,但是由于依赖的DLL实在是太多,着实有点不太方便。一个mingw编译的qt gui程序,光是依赖dll就有30-50M的依赖库,确实很不爽啊。不过7z压缩后有10M左右,还可以接受

Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。
具体步骤:
一,先动态编译链接,生成exe文件
二,找到依赖的dll文件
       这里,我们可以用Process Explore来获取所依赖的dll文件
      下载:
       ?shareid=419262&uk=2701984065
       打开procexp.exe,通过菜单View==》Lower Pane View==》DLLs  勾选,显示dll窗口

技术分享


        这里,我们以test.exe为例,
        在Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。

技术分享


       系统目录下的,,一般不用关心,按Path排序,看Qt目录及mingw目录下的,将这些dll拷贝出来,单独放到一个目录下。
三,打包
       打包工具,这里选用Enigma Virtual Box,
       下载:
        ?shareid=419263&uk=2701984065
       安装,运行

技术分享


       Enter Input File Name中,选择exe
       Enter Output File Name,输出文件名称
       点Add按钮,将前面准备好的dll文件,添加进来
       点Files Options,勾选Enable Files Virtualization和Compress files,OK
       最后,点Process,大告成。

技术分享

Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/63052.html