QT 4.8 靜態庫編譯方法
最最初踏上QT之路是受到了XiaomaGee的指點,相比於常規的視窗程式開發,QT有著以下特點:
1、 優良的跨平臺特性(支援Win、Linux、Mac 不同的平臺下只需重新編譯即可使用)
2、 面向物件
3、 豐富的API
4、 支援2D/3D圖形渲染,支援OpenGL
5、 大量的開發文件(無需像VC一樣裝幾個G的MSDN)
6、 XML支援
其實,僅僅是第一點,就足以讓我從VC轉向QT。並且在本人的學習過程中發現,QT可以很輕易就打造出漂亮的介面,實在是讓我愛不釋手。不論是打造一些實用小程式,或是開發上位機,QT都是很不錯的選擇!
之前用VC++的時候,只要是編譯出來的exe,就可以放到大多數的電腦上執行,而QT不同,由於QT預設是動態編譯,正常執行需要呼叫QT的標準庫(即.dll),因此要想脫離IDE單獨執行,必須滿足:將關聯的dll拷貝至.exe同目錄(或system32資料夾內),或者在環境變數中新增QT標準庫的路徑。否則就會出現如下警告:
這就使得QT的通用性受到了侷限,尤其是用QT開發上位機時,如果需要在某臺電腦上觀測資料,除了exe,還得拷貝一大堆dll過去,顯得很麻煩,那麼,有沒有辦法可以滿足,僅需要一個exe檔案,就可以在所有裝有win系統下的電腦上執行呢?答案是肯定的!
這就需要將QT的標準庫進行靜態編譯。
本人曾在網上查找了大量資料,經過各種嘗試各種失敗,最終完成了QT4.8最新版本的庫編譯。現將整個步驟,從軟體安裝開始,整理出來供大家參考與交流。
PS:這裡選用的是Windows系統下的QT SDK作為開發環境,如果用VS編譯,僅需在個別步驟稍作修改即可,本人不用VS很久,所以沒有親自測試。
步驟一:下載軟體安裝包
一共需要下面3個安裝包
1、 QT下載
下載QT SDK及QT Library
選擇離線安裝包
選擇MinGW版的QT標準庫(VS版的對號入座)
QT4.8的標準庫編譯需要用到perl
步驟二:安裝軟體
1、 安裝QT SDK
目前QT已經被Nokia收購,因此安裝包中會有很多手機程式的開發元件,如果不需要,按照下面給出的配置,去掉不需要的元件即可
首先在這一頁選擇“Custom”
API部分全部去掉
“Development Tools”中選擇“QT Creator”(預設)和“Desktop QT”中的MinGW版
個人判斷:這個庫用於QT的動態編譯,選擇安裝,即可在今後實現:除錯時使用動態庫,方便快捷;釋出時使用靜態庫,便於使用。
這裡我又選擇了一遍MinGW,保險起見:)
2、 安裝QT標準庫
這裡有一點要注意,安裝前的最後一步需要選擇MinGW的安裝目錄,在QTSDK資料夾下
選擇mingw的資料夾即可
3、 安裝Perl環境
一路狂點Next即可
步驟三:標準庫的編譯
1、 配置編譯選項
1)開啟X:\Qt\4.8.0\mkspecs\win32-g++\qmake.conf (X為QT安裝碟符)
(建議先備份一下)
在QMAKE_LFLAGS後面加上 –static
並將QMAKE_LFLAGS_DLL後面的 –shared 改為 –static
儲存並關閉
2)將X:\Qt\4.8.0\bin 下的syncqt與syncqt.bat 這兩個檔案刪除或改名
否則在編譯時會提示找不到perl環境,如下圖所示
2、 開始編譯
開啟Qt 4.8.0 Command Prompt軟體,輸入
configure –static –release –no-exceptions
PS:這個配置僅編譯release版本,如果需要同時需要靜態版的Debug版本,需要把-release 改為 –debug-and-release
回車後會有版本選擇和使用者協議,先後按”o”(Open Source) “y”(Yes)
…………耐心等待一會…………
配置完成後會出現下面這個畫面:
————在開始這個步驟前,請確保你有至少2個小時的空閒時間————
接著輸入 mingw32-make sub-src
回車………該幹啥幹啥去吧…………直到你看到下面這個畫面:
PS:編譯過程中可以瀏覽網頁,可以刷微博聊QQ,但不建議跑大型程式,否則會大幅降低編譯速度!!
當你看到這個畫面時,恭喜你,馬上就成功了~
步驟四:配置QT Creator
開啟QT Creator新建一個工程,在Project介面點選下圖所示的Manage按鈕
點選ADD
進入目錄X:\Qt\4.8.0\qmake 選擇qmake.exe 如下圖
底下的Version Name可以自己起(我用的Qt 4.8.0 Static)
返回Project介面,新增剛才選擇的編譯器
選擇好之後,記得確認選擇的是QT4.8.0的Release版本(靜態Debug版沒有編譯,所以選擇該模式會出錯)
編譯一下,進入工程目錄,直接雙擊程式,完美執行!
至此,QT靜態編譯完成。
由於QT直接編譯出來的exe體積較大,為了節省空間,便於儲存與傳播,可以壓縮一下,這裡選用UPX
拷貝UPX.EXE至C:\Windows\System32目錄下
在cmd中輸入upx(+空格)(+檔案路徑+檔名)(+回車)
即可出現下圖
壓縮比例為39.93% 可見效果還是非常可觀的
至此,QT的靜態庫編譯全部完成。
為了保證教程的準確性,我在寫教程前,已將QT完整刪除並重新安裝編譯,每完成一步就寫一步的教程。我的編譯方法未必是最好的,但是按照我的方法,保證可以成功!
Enjoy :)