專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

Qt5 編譯 & 打包依賴dll發(fā)布

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月03日   【字體:

十年前學(xué)
C++的時(shí)候,無聊到把windows 文件夾下幾乎所有的*.dll 都看過一遍。偶爾在程序運(yùn)行時(shí)看到缺少 *.dll 的提示,都會(huì)直接找出來解決。

 

隨著“開發(fā)平臺(tái)”和“編譯器”版本的逐年升級(jí),一個(gè)程序的依賴鏈接庫(kù)體積也越來越大,這給碼農(nóng)、程序猿、軟件攻城獅們測(cè)試和發(fā)布都造成了比較大的麻煩!

六年前做過某專業(yè)軟件漢化包的安裝程序打包,感覺專業(yè)的安裝程序制作工具對(duì)一些小程序來說太浪費(fèi)了,而且用戶會(huì)覺得不夠“綠色”。如果能夠簡(jiǎn)單的完成打包,并滿足基本要求,那是比較好的解決方案。

前段時(shí)間有不少人都問到我“用什么軟件做上位機(jī)GUI比較好?”,最近看了兩天Qt,就拿這個(gè)說事吧。

Qt,是一個(gè)1991年由奇趣科技開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。和Java的“一次編譯,到處運(yùn)行”所不同的是,Qt是源代碼級(jí)的跨平臺(tái),具有“一次編寫,到處編譯”的特性。Google Earth、SkypeOpera…… 很多軟件都是基于Qt編寫的。

目前最新版本是 5.1.1,由于前段時(shí)間玩linux 的編譯上癮了,也懶得去裝 MS Virual Studio2010/2012,于是下載了qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe(集成mingw4.8、opengl)。

一、    軟件環(huán)境安裝與設(shè)置

5.1.1 版本在windows平臺(tái)的移植和集成進(jìn)一步完善了,不需要像網(wǎng)上那些針對(duì)舊版本的教程中說的需要繁瑣的設(shè)置。只需要像典型的windows安裝程序一樣鼠標(biāo)點(diǎn)擊即可完成安裝(當(dāng)然在安裝中要注意的是:mingw 默認(rèn)并未選中)。

這個(gè)是能夠持續(xù)看上兩天Qt的主要原因。!

二、    項(xiàng)目設(shè)置與程序編譯

這個(gè)看看教程就行了,只是5.1.1 的教程暫時(shí)還沒有出現(xiàn)!

隨便找了個(gè)經(jīng)典的“Hello world!”來跑了一下,有驚無險(xiǎn)的“構(gòu)建成功”。

PS:和所有英文軟件一樣,項(xiàng)目路徑里不要有中文、日文、韓文、火星文等等說英語的家伙不認(rèn)識(shí)的符號(hào)!

PS:不要認(rèn)為別人編譯通過的程序就一定能編譯成功,編譯環(huán)境和軟件升級(jí)中的更新都可能導(dǎo)致失敗!

三、    程序發(fā)布

程序編譯的時(shí)候默認(rèn)是“debug”的,其實(shí)和“release”生成的exe 都差不多,只是依賴鏈接庫(kù)的大小不一樣。對(duì)于普通用戶,其實(shí)對(duì)程序大小是不敏感的,更多的人會(huì)關(guān)心華麗的人機(jī)界面或者繁雜的功能。只有要求苛刻的嵌入式系統(tǒng)用戶和有強(qiáng)迫癥的碼農(nóng)、程序猿、軟件攻城獅們會(huì)追求極限的壓縮體積!

四、    程序打包

要求苛刻的嵌入式系統(tǒng)用戶有時(shí)候?qū)幵干釛壭碌墓δ埽紩?huì)要求穩(wěn)定可靠的應(yīng)用,而版本升級(jí)有時(shí)候并沒有軟件開發(fā)商的廣告說的那么美好。

eg:隨便下了個(gè)“串口調(diào)試助手”來做Model。

Qt4編譯這個(gè)“串口調(diào)試助手”,生成的依賴鏈接庫(kù)只有4個(gè),文件大小都還能夠接受;

換成Qt5 來編譯,會(huì)發(fā)現(xiàn)一下多了很多東西出來!

 


即使是用壓縮工具壓縮打包以后(
 
)的體積,仍然比未壓縮的舊版本要大!

 


一個(gè)小工具(一個(gè)
mingw編譯的Qt gui程序),依賴的DLL實(shí)在是太多,著實(shí)有點(diǎn)不太方便。而在社區(qū)里更多人提到的都是“靜態(tài)編譯”,但是使用“靜態(tài)編譯”又會(huì)受到開源許可的一些限制。

現(xiàn)在該是我們的小伙伴“Enigma Virtual Box”表現(xiàn)的時(shí)候了。!

五、    打包依賴鏈接庫(kù)

EnigmaVirtual Box 最新版本是 6.80 Build 20131003,啟動(dòng)后如下圖所示:

 


在“
Enter Input File Name”一欄指定Qt編譯生成的 *.exe 文件,同時(shí)在“EnterOutput File Name”一欄會(huì)自動(dòng)生成打包后輸出文件的路徑和文件名稱。(請(qǐng)無視中間的廣告。

點(diǎn)擊左下方的“Add…”按鈕,添加所有的依賴鏈接庫(kù)文件;然后點(diǎn)擊右下方的“FilesOptions”,在彈出的對(duì)話框里選中“Enable Files Virtualization”和“CompressFiles”兩項(xiàng);“OK”后返回點(diǎn)擊“Process”并等待小伙伴干完該干的活。

 


小伙伴生成的
*.exe 文件(18.247KB )的尺寸要小了很多,并且這是一個(gè)純粹的“綠色軟件”,直接復(fù)制就能在任何存儲(chǔ)介質(zhì)上運(yùn)行了!有了這個(gè),媽媽再也不用擔(dān)心系統(tǒng)會(huì)突然彈個(gè)框框出來,提示缺少××.dll 文件了!

六、    Qt5 主要依賴鏈接庫(kù)說明

1.QT模塊庫(kù)

1

2

3

4

Qt5Core.dll      #QT核心庫(kù)

Qt5Gui.dll       #QT Gui庫(kù)

Qt5Widgets.dll   #QT Widgets庫(kù),QT 5GUI程序基本都需要此dll

#還有其他程序用到的Qt5XXX.dll

2.ICU依賴庫(kù)

International Component for Unicode,Unicode工具)

1

2

3

icudt51.dll     

icuin51.dll    

icuuc51.dll   

3.QT插件庫(kù)(新增庫(kù),路徑必須正確)

1

2

3

4

5

6

# 根據(jù)不同的程序,需要不同的插件庫(kù)

#例如 QT_DIR/plugins/*/*.dll

# 需要將 platforms/*.dll,accessible/*.dll的文件結(jié)構(gòu)保留

# 放在你所編譯的程序所在目錄

plugins/platforms/qwindows.dll

plugins/accessible/qtaccessiblewidgets.dll

4.EGL依賴庫(kù),為OpenGL,OpenGL es提供接口

1

2

libEGL.dll

libGLESv2.dll

5.mingw依賴庫(kù)(msvc編譯則無需這些庫(kù))

1

2

3

libgcc_s_dw2-1.dll

libstdc++-6.dll

libwinpthread-1.dll

6.VC運(yùn)行庫(kù)(mingw編譯則無需這些庫(kù))

1

2

msvcr110.dll(對(duì)應(yīng)VS2012

msvcp110.dll

 

最后,讓新的小伙伴 Qt5 給我打個(gè)招呼,得瑟一下!

關(guān)閉窗口

相關(guān)文章