首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在qmake /qmake/ MinGw调试构建中不工作的PRECOMPILED标头

在qmake /qmake/ MinGw调试构建中不工作的PRECOMPILED标头
EN

Stack Overflow用户
提问于 2014-01-08 22:52:15
回答 1查看 3.4K关注 0票数 4

在Qt中,我有一个使用PRECOMPILED头的pro文件。

当我在发布模式下构建时,构建工作非常完美。但是在Debug模式下构建会产生错误,生成对象文件失败。示例:

代码语言:javascript
复制
17:12:40: Running steps for project Euclide...
17:12:40: Configuration unchanged, skipping qmake step.
17:12:40: Starting: "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" 
C:\Qt\5.2.0\mingw48_32\bin\qmake.exe -spec win32-g++ CONFIG+=debug -o Makefile ..\euclide\Euclide.pro
C:/Qt/Tools/mingw48_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/UserPrograms/Euclide/build'
g++ -c -include debug\_pch.h -pipe -fno-keep-inline-dllexport -std=gnu++11 -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_WEBKITWIDGETS_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_QUICK_LIB -DQT_POSITIONING_LIB -DQT_OPENGL_LIB -DQT_PRINTSUPPORT_LIB -DQT_WEBKIT_LIB -DQT_MULTIMEDIA_LIB -DQT_QML_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_SENSORS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\euclide -I"..\..\..\Program Files (x86)\boost\boost_1_53_0" -I"..\numlib\mathvec" -I"..\..\..\Qt\5.2.0\mingw48_32\include" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtWebKitWidgets" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtMultimediaWidgets" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtQuick" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtPositioning" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtOpenGL" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtPrintSupport" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtWebKit" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtMultimedia" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtQml" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtWidgets" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtNetwork" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtSensors" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtGui" -I"..\..\..\Qt\5.2.0\mingw48_32\include\QtCore" -I"debug" -I"." -I"." -I"..\..\..\Qt\5.2.0\mingw48_32\mkspecs\win32-g++" -o debug\main.o ..\euclide\main.cpp

Makefile.Debug:1543: recipe for target 'debug/main.o' failed
mingw32-make[1]: *** [debug/main.o] Error 1
mingw32-make[1]: Leaving directory 'C:/UserPrograms/Euclide/build'
makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
17:12:59: The process "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project Euclide (kit: Desktop Qt 5.2.0 MinGW 32bit)
When executing step 'Make'
17:12:59: Elapsed time: 00:19.

真正令人困惑的是,它在发布时工作得很好。我用一个小项目进行了一些测试,它在发布或调试模式中运行良好,但是由于任何原因,一个更大的项目正在失败。在Debug中编译项目的单个文件甚至是不可能的。pro档案如下:

代码语言:javascript
复制
QT += core gui \
    webkitwidgets \
    printsupport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Euclide
TEMPLATE = app

QMAKE_CXXFLAGS += -std=gnu++11

CONFIG += precompile_header

# Use Precompiled headers (PCH)
PRECOMPILED_HEADER  = _pch.h    

SOURCES +=  main.cpp\
    mainwindow.cpp \
    zero.cpp \
    ... lot of files here...
    debug_tool.cpp

HEADERS += mainwindow.h \
    zero.h \
    ... lot of files here...
    debug_tool.h \
    _pch.h

FORMS += mainwindow.ui \
    zero.ui \
    ... other files...
    apphelp.ui \
    message.ui

INCLUDEPATH = "C:/Program Files (x86)/boost/boost_1_53_0"

LIBS += \
    ../build/release/exprcompiler.dll

RESOURCES += \
    resources/euclide_resources.qrc

我花了几天的时间在网上解决这个问题,但没有找到任何解释,即使有关qmake的文档是完整的.

有人知道如何解决这个问题吗?因为我现在考虑的唯一解决方案是拥有一个特殊的“调试”版本的所有项目,没有预编译的头.谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-04-30 16:02:15

我(可能)遇到了同样的问题,花了一些时间才弄清楚到底发生了什么。

经过一些修改,创建了一个MWE,我发现,.pch文件的大小似乎是这个问题的关键。

使用大于128 MB的PCH将在没有任何消息的情况下中止编译,并返回代码1(而不是成功编译的0)。

我的发现类似于这个GCC邮寄名单条目中提到的问题。

使其工作的唯一方法似乎是将PCH文件的大小减少到128 MB以下。

为了记录在案:我使用的是QT5.2.1中的QMake项目,以及包含MinGW (rev2) gcc 4.8.0 32位的WinXP 32位,并赢得了8 64位。

另一方面,我的GCC 4.8.2 64位在linux下没有抱怨地吃了一个~5GB的PCH文件(我本来可以测试一个更大的文件,但是编译这个文件几乎超过了我的RAM)。

挖得更深

我生成了一个用作PCH的头文件,其内容如下:

代码语言:javascript
复制
class _1 {};
class _2 {};
class _3 {};
class _4 {};
class _5 {};
class _6 {};
class _7 {};
class _8 {};
class _9 {};
class _10 {};
//...

使用二进制搜索(该文件中的类数),我发现用128273个类填充这个文件会生成一个大小为135266564字节的PCH文件,并可用于编译其他文件。使用128274类,生成的PCH文件大小为135270660字节,使用此PCH编译失败。

我不知道该如何处理这些信息。不给错误信息绝对是错误的,但我不知道该怪谁(GCC (版本?),MinGW/Windows,32位)。

也许手头有更多时间的人可以决定并通知合适的人?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21008274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档