Qt5应用程序的部署

时间:2022-06-21 20:47:24

1.概述

和以往版本的QtSDK不同,Qt5对整个SDK结构进行了较大幅度的修改。以前Qt4的代码移植到Qt5版本上,需要更改的东西(包括QApplicationTextCodec等)也比较多。Qt5应用程序的部署与之前版本之间的差异,主要是需要增加Qtplugins/platforms/下的dll的部署。

2.依赖库一览

2.1QT模块库

Qt5Core.dll     

#QT核心库

Qt5Gui.dll      

#QT Gui

Qt5Widgets.dll  

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

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

 

2.2ICUInternational Component for UnicodeUnicode工具)依赖库 

icudt49.dll

icuin49.dll

icuuc49.dll

 

2.3QT插件库,Qt新增,注意路径必须正确

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

#例如

QT_DIR/plugins/*/*.dll

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

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

plugins/platforms/qwindows.dll

plugins/accessible/qtaccessiblewidgets.dll

 

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

libEGL.dll

libGLESv2.dll

 

2.5mingw依赖库(msvc编译则无需这些库

libgcc_s_sjlj-1.dll

libstdc++-6.dll

libwinpthread-1.dll

 

2.6VC运行库(mingw编译则无需这些库

msvcr110.dll(对应VS2012

msvcp110.dll

 

3.文件结构

--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)

4.结论

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

 

附:简化qt程序发布的动态库聚合法

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

Qt5应用程序的部署

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

Qt5应用程序的部署

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

Qt5应用程序的部署

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

Qt5应用程序的部署

5.Bug

Qt5.2.1或其他版本运行Qt Quick2程序会发生错误

getProcAddress: Unable to resolve 'glCreateProgram'
getProcAddress: Unable to resolve 'glCreateProgramARB'
getProcAddress: Unable to resolve 'glCreateProgramObject'

在使用Qt quick2或者与图形加速的时候都可能出现这种情况,Qt5是使用OpenGL加速的,所以显卡必须支持OpenGL2.0及以上版本,而且显卡驱动也要正确,现在显卡一般都支持OpenGL,如果显卡是支持OpenGL2.0,驱动也要支持OpenGL2.0,,就是驱动不好弄,找不到支持OpenGL2.0的驱动,因为如果显卡不是很好的话OpenGL加速性能也不会有很大的提高

The “getProcAddress” errors indicate that Qt can’t find the appropriate OpenGL drivers. Qt requires OpenGL 2 or later. Do you have a graphics card with the latest drivers installed? 

 

6.参考资料

官方文档:http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html

http://blog.csdn.net/skykingf/article/details/8623537

http://blog.csdn.net/derryzhang/article/details/17002193#

http://www.cnblogs.com/neochin/archive/2013/08/19/3267097.html

http://www.qtcn.org/bbs/read-htm-tid-54968.html

http://qt-project.org/forums/viewthread/35448


原文地址:http://blog.csdn.net/yinyhy/article/details/19990239