2009年4月28日 星期二

Qt4.5.1 & 靜態編譯

一直想要試試看Qt靜態編譯的方法,看了很多文章,總覺得很麻煩,總希望那一天Qt(現在是Nokia的公司)出新的版本,
只要 qmake -static -project -o yes.pro 就搞定, CC...

不過我幻想的情況沒來,卻來了一個LGPL授權方式...
這個東西,簡單講,就是Qt所提供的GUI library,如果以動態連接的方式使用,則原程式設計者,可以擁有發佈形式的權利...
所以,對於商業應用的人來說,可以不需權利金,就能發展商業應用,看來是個雙贏的策略

因此,靜態編譯的方法,似乎吸引力就沒這麼大了...
但是既然看了很多文章,就這樣放水流,也可惜,還是記錄一下,順便把我那一堆書籤消化一下

目前Qt的4.5版本,已經採用了LGPL授權方式,最新版本4.5.1
下載 的Qt SDK包括了Qt. MinGW和Qt Creator

隨著Qt SDK下載回來的MinGW,在命令模式輸入gcc --version顯示3.4.2(mingw-special)

實驗記錄:
1. 下載qt-win-opensource-2009.02.exe ,安裝
2. 複製Qt下的"2009.02"目錄,取名叫"4.5.1-static"
3. 執行Qt Command Prompt,切換到"4.5.1-static\qt"目錄下
4. 輸入configure -static -release  -no-exceptions ,執行(大概25分鐘)
5. 輸入mingw32-make sub-src,執行(大約2個多小時)
6. 輸入mingw32-make clean,之後整個"4.5.1-static"目錄大約1GB
7. 砍掉"4.5.1-static\qt"目錄下所有.dll檔,之後整個目錄大約672MB
8. 請將這目錄"4.5.1-static"好好保存起來,不然再做一次,很浪費電...

若需要編譯成靜態連結的方式,就將目錄裡qt\bin設進PATH裡,就可以用了

目前編譯環境MinGW/MSYS...對於Qt Creator這個IDE,還不熟,我想應該不錯用...
至於Qt Creator的靜態連結設定,有機會再研究...

PS 1: 編譯完的library,只能編譯release版本(代表沒有debug資訊),且是靜態連接,符合一般發佈的情況,不過License必須使用GPL
PS 2: -no-exceptions是要拿掉mingwm10.dll相依,不過沒有exception會有啥影響,未知...
PS 3: 一些plugin型式的library,需要特別處理,請參考介紹的文章
PS 4: 在XP sp3沒法編譯完成,還有從相關文章報告,windows 7也有些問題,我是在XP sp2環境下完成

相關連結:

這裡有一位作者講解LGPL授權
http://jay-notebook.blogspot.com/2009/01/qt-45-lgpl-21.html

其他作者的文章,關於靜態編譯的方法
http://hi.baidu.com/jzinfo/blog/item/c17c3f6d4ff439fe431694c3.html
http://www.wretch.cc/blog/jaywang4/15097262
http://lists.trolltech.com/qt-interest/2006-08/thread00942-0.html
http://lists.trolltech.com/qt-interest/2005-10/thread00381-0.html#msg00553
http://www.linuxfans.org/bbs/thread-182853-1-1.html
http://www.dotblogs.com.tw/yotrew/archive/2009/03/19/7568.aspx
http://www.qtforum.org/article/26946/how-to-deploy-a-static-app-in-qt-4-5.html
http://blog.yam.com/kaizan/article/20066326
http://jarsing.blogspot.com/2009/03/qtqtdll.html

沒有留言:

張貼留言