2011年7月26日 星期二

如何build出不需要另外建置環境的QT exe檔

目標是如何在透過QT寫出執行檔,並且直接在另一台沒有QT的library環境上執行

測試過程:
下載程式碼:

1. 先讓qmake去掃整個程式檔案架構 (產生hello.pro)
%> qmake -project

2. 再用qmake依hello.pro產生Makefile
%> qmake

3. 開始編譯
%> mingw32-make release

若直接在原本的command windows執行檔案,會成功,但是,若是用點滑鼠點兩下的方式,會失敗,並且出現出現找不到mingwm10.dll的錯誤。
原因是,目前使用的是動態連結lib的方式,所以,在執行時,會去%PATH%的目錄中尋找相對應的lib。因為,我們若是用QT的command windows,因為,%PATH%都已經設定好了,所以,可以找到相對應的lib。
若我們直接用滑鼠點兩下的方式,吃的是系統預設的PATH,所以,會出現找不到lib的錯誤訊息。
有兩個解決方式
1. 把需要的lib放在系統的%PATH%路徑中
2. 編譯出靜態連結執行檔(執行檔會變的比較大)

Q: 出現找不到mingwm10.dll錯誤
A1: 在Makefile裡面把-mthreads刪除
A2: 直接在hello.pro加入以下內容 (參考qmake.conf相對應的Flag)
QMAKE_CXXFLAGS_EXCEPTIONS_ON -= -mthreads
QMAKE_LFLAGS_EXCEPTIONS_ON -= -mthreads
A3: 直接在win32-g++\qmake.conf 移除掉所有的"-mthreads".

Q: 出現找不到libgcc_s_dw2-1.dll錯誤
A1: 在Makefile裡面的FLAGS加入-static

Q: 出現找不到QtCore4.dll錯誤
A1: ...
A2: 直接把mingwm10.dll, libgcc_s_dw2-1.dll, qtcore4.dll, qtgui4.dll放到與執行檔同一個目錄

參考資料:
用Qt Creator開發Windows的簡單計算機的程式
記錄-如何建立MSVS的Qt編譯環境?
[Mobile]Nokia的開發工具-Qt framework
[Qt密技]執行Qt程式時找不到相關dll檔該怎麼辦?
Removing mingwm10.dll dependency
QT static 出現找不到libgcc_s_dw2-1.dll
windows下 Qt 静态编译
Qt 程序在 windows 下的发布
Deploying an Application on Windows

沒有留言: