1. 程式人生 > >QT環境搭建: QT-4.8.6在windows下的使用 -(2)靜態編譯

QT環境搭建: QT-4.8.6在windows下的使用 -(2)靜態編譯

參考連結:

連結1 - 理解靜態編譯的過程:

win7 32位下 QT4.8.6從安裝配置到靜態編譯

連結2 - 靜態編譯的過程參考(1):

連結3 - 靜態編譯的過程參考(2):

完整的windows下搭建Qt開發環境QT4.8+qt creator2.8.0  

連結4 - 靜態編譯的過程參考(3):

Qt4.8.6靜態編譯

目的:在windows下,qt程式可以拿到別的機子上執行;

分析:QT預設的編譯方式是動態編譯,即執行程式需要依賴QT動態連結庫中的dll檔案,如果想在別的電腦上執行你的程式,就需要把這些dll檔案一起放到exe下一起帶走,但是QT有幾個動態連結庫太大了一個就要上百兆,如果你的程式中需要用到這些

dll檔案中的東西,就需要一起帶走,這樣的話你做一個很小的程式最後需要執行的話足足要幾百兆的空間,很是浪費。還好QT提供了靜態編譯,就是編譯後把你程式中需要用到的東西從dll動態連結庫中提取出來,這樣的話使得生成的exe可執行檔案不再依賴於QT的動態連結庫,自然程式最後會小很多。 

前期工作:

1.進入:C:\Qt\4.8.6_MinGw\mkspecs\win32-g++\qmake.conf

將該檔案的63行替換為QMAKE_LFLAGS        = -static
將該檔案的70行替換為QMAKE_LFLAGS_DLL        = -static

2.將:C:\Qt\4.8.6_MinGw

目錄下的mkspecs拷貝到目錄:D:\study\Qt_4.8.6_static_lib下;接著開啟開始選單中的  Qt 4.8.6 Command Prompt

輸入命令:

configure -debug-and-release -platform win32-g++ -static -opensource -prefix D:\study\Qt_4.8.6_static_lib -nomake examples -nomake demos -no-exceptions -no-stl -no-rtti -no-qt3support -no-scripttools -no-openssl -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite 

成功會提示輸入是否接受許可證,輸入y”,就開始配置了;

注意:

a.這裡最好直接從瀏覽器複製到cmd中,不要從文件裡複製過去!

b.引數分析:

-debug-and-release:表示能支援生成debugrelease版本,可以自由選擇;

-prefix D:\study\Qt_4.8.6_static_lib:表示編譯,安裝後的庫等檔案會在該目錄生成;

-platform win32-g++:表示用的編譯器;

PS:另可以加入引數:-fast快速編譯;(未測試)

c.如果配置有誤,執行mingw32-make confclean對錯誤的配置進行清除,並重新開始配置;

PS:出現過的錯誤及解決方式:

 

分析:提示在D:\study\Qt_4.8.6_static_lib目錄下沒有編譯器;

解決:進入qmake子目錄,執行make clean;接著將C:\Qt\4.8.6_MinGw目錄下的mkspecs拷貝到目錄:D:\study\Qt_4.8.6_static_lib下,即可解決;

3.執行mingw32-make開始進行編譯。最少準備四個小時(建議:晚上編譯);

編譯之後執行mingw32-make install 將編譯好的Qt庫安裝到-prefix

D:\study\Qt_4.8.6_static_lib所指定的目錄下,完成!

4.進入qtcreator,設定靜態編譯:

a.進入:project -> Kits -> Add ->設定NameQt_4.8.6_static

b.點選:Qt Versions -> Add ->設定qmake location為靜態編譯目標目錄下的qmake,即:D:\study\Qt_4.8.6_static_lib\bin\qmake.exe,點選Apply

c.點選kits ->如下圖設定:

 

點選:Apply即可;

5.按照之前的helloworld工程,繼續在qtcreator中:設定編譯為release - qmake - make -run;發現在helloworld工程下又多了一個子目錄,為

build-helloworld-Qt_4_8_6_static_lib-Rele ase - 進入release目錄,發現有helloworld.exe,這個就是可以用來發布的可執行程式;

6.拷貝helloworld.exe到別人的電腦,直接執行,成功!哈哈,接下來就可以製作windows的程式了!過幾天先搞個小遊戲先!

PS現在用release方法編譯你的工程,這樣靜態編譯以後只是不再依賴QT的動態連結庫,但是你要用到C++或者C的東西的話還是要依賴相應的C或者C++ dll檔案,把生成的release資料夾移到其他電腦上執行,如果提示缺少某些dll,就到編譯器MingW下的bin裡面找到需要的DLL檔案,複製到資料夾目錄下,相比QTdll檔案小很多了,一般都是幾百k,這樣的話你的程式就能在任意電腦上運行了。

最重要的是,以後生成的QT程式都可以通過靜態編譯的方法,不再依賴QT的動態連結庫,方便多了。

附:用UPX壓縮該可執行程式helloworld.exe

將該工具拷貝到:D:\study

設定環境變數:

 

開啟開始選單 - 輸入cmd -進入qt應用程式目錄-輸入命令:upx helloworld.exe,如下圖:

 

qt程式由9M壓縮成了3M,效果很明顯;