QT动态编译程序的打包发布教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.概述和以往版本的QtSDK不同,Qt5对整个SDK结构进行了较大幅度的修改。以前Qt4的代码移植到Qt5版本上,需要更改的东西(包括QApplication、TextCodec等)也比较多。Qt5应用程序的部署与之前版本之间的差异,主要是需要增加Qt里plugins/platforms/下的dll的部署。2.依赖库一览2.1QT模块库Qt5Core.dll#QT核心库Qt5Gui.dll#QTGui库Qt5Widgets.dll#QTWidgets库,QT5中GUI程序基本都需要此dll#还有其他程序用到的Qt5XXX.dll2.2ICU(InternationalComponentforUnicode,Unicode工具)依赖库icudt49.dllicuin49.dllicuuc49.dll2.3QT插件库,Qt新增,注意路径必须正确#根据不同的程序,需要不同的插件库#例如QT_DIR/plugins/*/*.dll#需要将platforms/*.dll,accessible/*.dll的文件结构保留#放在你所编译的程序所在目录plugins/platforms/qwindows.dllplugins/accessible/qtaccessiblewidgets.dll2.4EGL依赖库,为OpenGL,OpenGLes提供接口libEGL.dlllibGLESv2.dll2.5mingw依赖库(msvc编译则无需这些库)libgcc_s_sjlj-1.dlllibstdc++-6.dlllibwinpthread-1.dll2.6VC运行库(mingw编译则无需这些库)msvcr110.dll(对应VS2012)msvcp110.dll3.文件结构--platforms--qwindows.dll--*.dll--accessible--qtaccessiblewidgets.dll--*.dll--(otherpluginfolder)--*.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.结论QT5虽然有了ICU,OpenGL的支持,还有c++11的支持,但是由于依赖的DLL实在是太多,着实有点不太方便。一个mingw编译的qtgui程序,光是依赖dll就有30-50M的依赖库,确实很不爽啊。不过7z压缩后有10M左右,还可以接受。5.BugQt5.2.1或其他版本运行QtQuick2程序会发生错误getProcAddress:Unabletoresolve'glCreateProgram'getProcAddress:Unabletoresolve'glCreateProgramARB'getProcAddress:Unabletoresolve'glCreateProgramObject'在使用Qtquick2或者与图形加速的时候都可能出现这种情况,Qt5是使用OpenGL加速的,所以显卡必须支持OpenGL2.0及以上版本,而且显卡驱动也要正确,现在显卡一般都支持OpenGL,如果显卡是支持OpenGL2.0,驱动也要支持OpenGL2.0,,就是驱动不好弄,找不到支持OpenGL2.0的驱动,因为如果显卡不是很好的话OpenGL加速性能也不会有很大的提高The“getProcAddress”errorsindicatethatQtcan’tfindtheappropriateOpenGLdrivers.QtrequiresOpenGL2orlater.Doyouhaveagraphicscardwiththelatestdriversinstalled?6.参考资料官方文档:://blog.csdn.net/skykingf/article/details/8623537://://://qt-project.org/forums/viewthread/35448附:简化qt程序发布的动态库聚合法Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。具体步骤:1、先动态编译链接,生成exe文件(release方式)2、找到依赖的dll文件这里,我们可以用ProcessExplore来获取所依赖的dll文件下载:打开procexp.exe,通过菜单View==》LowerPaneView==》DLLs勾选,显示dll窗口这里,我们以test.exe为例,在Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。系统目录下的,一般不用关心,按Path排序,看Qt目录及mingw目录(或VS目录)下的,将这些dll拷贝出来,单独放到一个目录下。QT目录中plugins文件夹里的动态链接库,比如platforms\qwindows.dll,在复制时应保留文件目录结构,即应该在目标目录中新建对应的platforms文件夹,将qwindows.dll放在该文件夹中。注意:以下链接库即使ProcessExplor中没有显示也要加上(可在mingw或VC安装目录中找到)。mingw依赖库(msvc编译则无需这些库):libgcc_s_sjlj-1.dl、libstdc++-6.dll、libwinpthread-1.dllVC运行库(mingw编译则无需这些库):msvcr110.dll(对应VS2012)、msvcp110.dll3、打包打包工具,这里选用EnigmaVirtualBox,下载:安装,运行EnterInputFileName中,选择exeEnterOutputFileName,输出文件名称点Add按钮,将前面准备好的dll文件(或者选择整个文件夹),添加进来点FilesOptions,勾选EnableFilesVirtualization和Compressfiles,OK最后,点Process,大功告成。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功