2012-10-24 55 views
1

我想用Code :: Blocks編譯一個簡單的Qt程序。我使用的是Qt的編譯系統,所以不用編譯Code :: Blocks,而是將Code :: Blocks的編譯目標類型設置爲「Commands only」,我使用的是前/後編譯步驟選項。我的「預構建步驟」的內容如下:Code :: Blocks與命令行(Qt)不一致的預生成選項

qmake.exe GUI.pro 
C:/QtSDK/mingw/bin/mingw32-make.exe -f Makefile.Debug 

當我代碼::塊中編譯,我得到這些錯誤:

c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib/libqtmaind.a(qtmain_win.o): In function `[email protected]': 
c:\iwmake\build_mingw_opensource\src\winmain/qtmain_win.cpp:93: undefined reference to `_Unwind_Resume' 
c:\iwmake\build_mingw_opensource\src\winmain/qtmain_win.cpp:135: undefined reference to `_Unwind_Resume' 
c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib/libqtmaind.a(qtmain_win.o):c:\iwmake\build_mingw_opensource\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:512: undefined reference to `_Unwind_Resume' 
c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib/libqtmaind.a(qtmain_win.o):c:\iwmake\build_mingw_opensource\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:513: undefined reference to `_Unwind_Resume' 
c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib/libqtmaind.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' 
collect2: ld returned 1 exit status 
mingw32-make.exe: *** [debug\GUI.exe] Error 1 

然而,奇怪的是,當我使用Windows命令行輸入上面的兩個命令,它工作正常。它成功地構建了一個工作的.exe,並顯示一個簡單的窗口。

Code :: Blocks和命令行的構建日誌完全相同(我選中),Code :: Blocks的錯誤除外。

看起來好像是qmake,makefile與此沒有任何關係,或者至少在makefile不變的情況下會發生上述情況。

我已經確保在每次編譯時刪除Debug中的.o和.exe文件。

除了cmd的.exe,Code :: Blocks和cmd都輸出相同的4個文件(3個.o文件和1個.cpp文件)。但是,我注意到一個文件在使用Code :: Blocks編譯時爲262kb,在通過命令行編譯時爲263kb。

在預生成步驟中,我試着用命令調用cmd,並且我試過調用一個批處理文件,但是出現了相同的錯誤。

+1

在命令行中可能存在有效的環境變量,它們在Code :: Blocks中不起作用。嘗試從命令行啓動Code :: Blocks並查看問題是否仍然存在。 –

+0

我也很好奇你爲什麼要爲Qt項目而不是Qt Creator使用Code :: Blocks。 –

+0

我試圖從命令行啓動Code :: Blocks,它仍然給出錯誤。我也忘了提及Code :: Blocks有環境變量和全局變量菜單,但它們是空白的。我沒有使用Qt Creator,因爲我不喜歡它作爲C++ IDE,而且我很挑剔。 – dreadmullet

回答

1

Code :: Blocks使用自己的GCC版本,而從命令行編譯使用Qt的版本。看來我對makefile的工作原理有一個基本的誤解。我想,因爲我打電話給Qt的MinGW,所以總是會使用Qt的MinGW編譯器。我猜不會。

將Code :: Blocks的編譯器更改爲Qt的GCC(設置 - >編譯器和調試器 - >工具鏈可執行文件)後,它工作正常。