2012-10-24 69 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(设置 - >编译器和调试器 - >工具链可执行文件)后,它工作正常。