Qt5應用程序的部署

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窗口


這裏,我們以test.exe爲例,
        在Qt環境下,將exe運行起來,在ProcessExplor中,找到就可以找到test.exe,選中,在下面就看到依賴的dll了。


系統目錄下的,一般不用關心,按Path排序,看Qt目錄及mingw目錄下的,將這些dll拷貝出來,單獨放到一個目錄下。
3、打包
       打包工具,這裏選用Enigma Virtual Box
       下載:
        http://pan.baidu.com/share/link?shareid=419263&uk=2701984065
       安裝,運行


Enter Input File Name中,選擇exe
       Enter Output File Name,輸出文件名稱
       點Add按鈕,將前面準備好的dll文件,添加進來
       點Files Options,勾選Enable Files VirtualizationCompress filesOK
       最後,點Process,大告成。


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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章