1

Code::Blocksを使用して単純なQtプログラムをコンパイルしようとしています。Qtのビルドシステムを使用しているので、Code :: Blocksをコンパイルする代わりに、Code :: Blocksのビルドターゲットタイプを「コマンドのみ」に設定し、ビルドステップの前後のオプションを使用しています。「ビルド前の手順」の内容は次のとおりです。

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

Code :: Blocks内でコンパイルすると、次のエラーが発生します。

c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib/libqtmaind.a(qtmain_win.o): In function `WinMain@16':
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コマンドラインを使用して上記の2つのコマンドを入力すると、正常に機能します。動作し、単純なウィンドウを表示する.exeを正常に構築します。

Code :: Blocksとコマンドラインのビルドログは、Code :: Blocksのエラーを除いて、まったく同じです(チェックしました)。

qmakeとmakefileはこれとは何の関係もないようです。または、少なくともmakefileが変更されない場合は上記のようになります。

コンパイルするたびに、デバッグで.oファイルと.exeファイルを削除するようにしました。

Code :: Blocksとcmdはどちらも、cmdの.exeを除いて、同じ4つのファイル(3つの.oファイルと1つの.cppファイル)を出力します。ただし、Code :: Blocksを使用してコンパイルした場合は1つのファイルが262kbであり、コマンドラインを使用してコンパイルした場合は263kbであることに気付きました。

ビルド前の手順で、コマンドを使用してcmdを呼び出してみました。また、バッチファイルを呼び出してみましたが、同じエラーが発生します。

4

1 に答える 1

1

Code :: Blocksは独自のバージョンのGCCを使用していましたが、コマンドラインからのコンパイルはQtのバージョンを使用していました。makefileがどのように機能するかについて根本的な誤解があるようです。QtのMinGWmakeを呼び出していたので、常にQtのMinGWコンパイラを使用することになりました。私はそうは思わない。

Code :: BlocksのコンパイラをQtのGCCに変更した後([設定]->[コンパイラとデバッガ]->[ツールチェーンの実行可能ファイル])、正常に機能しました。

于 2012-10-25T06:01:55.423 に答える