2009年1月30日 星期五

in windows using static link for QT application

qt static link application:
http://blog.lugru.com/2009/03/qt-static-mingwm10dll-and-deployment-under-windows-environment/

需要修改 %qtdir%\mkspecs\win32-g++\qmake.conf,
QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import
-Wl,-enable-runtime-pseudo-reloc


這樣可以編譯出 static link 的執行檔案, 不需要附加一堆 dll 檔案 (qt windows version)。

使用以下的 configure 參數來編譯 QT:

configure -static -release -no-exceptions -no-qt3support

sql support:
configure -static -release -no-exceptions -no-qt3support -qt-sql-mysql -qt-sql-odbc -qt-sql-sqlite -no-opengl

不過在 qt-4.6.2 有問題, 編譯到後方, 有些錯誤訊息:

e:\qt-everywhere-opensource-src-4.6.2\lib\libQtWebKit.a(MediaPlayerPrivatePhonon
.o):MediaPlayerPrivatePhonon.cpp:(.text+0xfc1): undefined reference to `_imp___Z
N6Phonon10createPathEPNS_9MediaNodeES1_'
e:\qt-everywhere-opensource-src-4.6.2\lib\libQtWebKit.a(MediaPlayerPrivatePhonon
.o):MediaPlayerPrivatePhonon.cpp:(.text+0xfd0): undefined reference to `_imp___Z
N6Phonon4PathD1Ev'
collect2: ld returned 1 exit status
mingw32-make[5]: *** [..\..\..\..\bin\assistant.exe] Error 1
mingw32-make[5]: Leaving directory `E:/qt-everywhere-opensource-src-4.6.2/tools/
assistant/tools/assistant'
mingw32-make[4]: *** [release] Error 2
mingw32-make[4]: Leaving directory `E:/qt-everywhere-opensource-src-4.6.2/tools/
assistant/tools/assistant'
mingw32-make[3]: *** [sub-assistant-make_default-ordered] Error 2
mingw32-make[3]: Leaving directory `E:/qt-everywhere-opensource-src-4.6.2/tools/
assistant/tools'
mingw32-make[2]: *** [sub-tools-make_default-ordered] Error 2
mingw32-make[2]: Leaving directory `E:/qt-everywhere-opensource-src-4.6.2/tools/
assistant'
mingw32-make[1]: *** [sub-assistant-make_default-ordered] Error 2
mingw32-make[1]: Leaving directory `E:/qt-everywhere-opensource-src-4.6.2/tools'

mingw32-make: *** [sub-tools-make_default-ordered] Error 2

但是有產生出 qt library, 我用來編譯程式, 沒有問題, 可以產生 static 版本的 qt 程式。
後來得知是 webkit 無法 static link, 所以有上述的錯誤訊息。

換成以下的 configure 參數:
configure -static -release -no-exceptions  -no-qt3support -no-dsp -no-s60 -no-webkit 

就可以了。而 qt 4.7 則會判斷這個問題, 若使用 static link, webkit 將不會被編進去 qt library。

windows only:
-no-sdp

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。