【问题标题】:Code::Blocks Pre-build options inconsistent with command line (Qt)Code::Blocks Pre-build 选项与命令行(Qt)不一致
【发布时间】:2012-10-24 21:56:13
【问题描述】:

我正在尝试用 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,并尝试调用批处理文件,但出现相同的错误。

【问题讨论】:

  • 命令行中可能存在有效的环境变量,但在 Code::Blocks 中无效。尝试从命令行启动 Code::Blocks,看看问题是否仍然存在。
  • 我也很好奇你为什么要在 Qt 项目中使用 Code::Blocks 而不是 Qt Creator。
  • 我尝试从命令行启动 Code::Blocks,它仍然给出了错误。我也忘了提到 Code::Blocks 有环境变量和全局变量菜单,但它们是空白的。我没有使用 Qt Creator,因为我不喜欢它作为 C++ IDE,而且我很挑剔。

标签: c++ qt codeblocks


【解决方案1】:

Code::Blocks 使用它自己的 GCC 版本,而从命令行编译使用 Qt 的版本。看来我对 makefile 的工作方式有一个基本的误解。我想,因为我调用 Qt 的 MinGW make 它总是使用 Qt 的 MinGW 编译器。我猜不是。

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

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多