我正在尝试用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命令行输入上面的两个命令时,它工作正常。它成功构建了一个有效的.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,并且我尝试调用批处理文件,但是出现了同样的错误。
答案 0 :(得分:1)
Code :: Blocks正在使用自己的GCC版本,而从命令行编译则使用Qt的版本。我似乎对makefile的工作方式有一个基本的误解。我想,因为我打电话给Qt的MinGW使它总是使用Qt的MinGW编译器。我猜不是。
在我将Code :: Blocks的编译器更改为Qt的GCC(设置 - >编译器和调试器 - >工具链可执行文件)之后,它运行良好。