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(International Component for Unicode,Unicode工具)依賴庫
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.參考資料
官方文檔: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