Qt5應用程式的部署
1.概述
和以往版本的QtSDK不同,Qt5對整個SDK結構進行了較大幅度的修改。以前Qt4的程式碼移植到Qt5版本上,需要更改的東西(包括QApplication、TextCodec等)也比較多。Qt5應用程式的部署與之前版本之間的差異,主要是需要增加Qt裡plugins/platforms/下的dll的部署。
2.依賴庫一覽
2.1QT模組庫
Qt5Core.dll
#QT核心庫
Qt5Gui.dll
#QT Gui庫
Qt5Widgets.dll
#QT Widgets庫,QT 5中GUI程式基本都需要此dll
#還有其他程式用到的Qt5XXX.dll
2.2ICU(
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雖然有了ICU,Open 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 Virtualization和Compress files,OK
最後,點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.參考資料