我正在尝试使用Code::Blocks编译一个简单的Qt程序。我使用的是Qt的构建系统,因此不是将Code::Blocks进行编译,而是将Code::Blocks的构建目标类型设置为“仅命令”,并且使用了pre / post构建步骤选项。我的“预构建步骤”的内容如下:

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命令行输入上述两个命令时,它可以正常工作。它成功构建了一个可以运行并显示简单窗口的.exe。

除了Code::Blocks的错误外,Code::Blocks和命令行的生成日志都完全相同(我检查过)。

似乎qmake和makefile与此无关,或者至少在makefile不更改时发生以上情况。

我确保每次编译时都在Debug中删除.o和.exe文件。

Code::Blocks和cmd都输出相同的4个文件(3个.o文件和1个.cpp文件),除了cmd的.exe文件。但是,我注意到,使用Code::Blocks编译时,一个文件为262kb,通过命令行编译时为263kb。

在预构建步骤中,我尝试使用命令调用cmd,并尝试调用批处理文件,但是出现相同的错误。

最佳答案

Code::Blocks使用自己的GCC版本,而从命令行进行编译则使用Qt的版本。似乎我对Makefile的工作原理有基本的误解。我发现自从我调用Qt的MinGW以来,它始终会使用Qt的MinGW编译器。我猜不是。

在将Code::Blocks的编译器更改为Qt的GCC之后(设置->编译器和调试器->工具链可执行文件),它运行良好。

关于c++ - Code::Blocks与命令行(Qt)不一致的预构建选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13058433/

10-12 16:07