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有幾個動態連結庫太大了一個就要上百兆,如果你的程式中需要用到這些
前期工作:
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
輸入命令:
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:表示能支援生成debug和release版本,可以自由選擇;
-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 ->設定Name:Qt_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檔案,複製到資料夾目錄下,相比QT的dll檔案小很多了,一般都是幾百k,這樣的話你的程式就能在任意電腦上運行了。
最重要的是,以後生成的QT程式都可以通過靜態編譯的方法,不再依賴QT的動態連結庫,方便多了。
附:用UPX壓縮該可執行程式helloworld.exe:
將該工具拷貝到:D:\study
設定環境變數:
開啟開始選單 - 輸入cmd -進入qt應用程式目錄-輸入命令:upx helloworld.exe,如下圖:
qt程式由9M壓縮成了3M,效果很明顯;