1. 程式人生 > >Qt5應用程式的部署

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.2ICU

International 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.參考資料