【问题标题】:cc1plus.exe crash when using large precompiled header file使用大型预编译头文件时 cc1plus.exe 崩溃
【发布时间】:2012-06-06 03:57:48
【问题描述】:

我在使用 MinGW 的预编译头文件时遇到问题。编译器似乎找到了预编译的头文件,但 cc1plus.exe 立即崩溃(cc1plus.exe 已停止工作)。

我知道这可能与 cc1plus.exe 的低堆栈大小有关,所以我做了以下操作来增加它:

editbin cc1plus.exe /STACK 33554432

我也试过无济于事:

editbin cc1plus.exe /STACK 32768k

但这并没有解决它,因为每当我尝试编译我的应用程序时它仍然会崩溃。

顺便说一句,如果重要的话,我正在使用最新的 MinGw (gcc v 4.6.2) 和最新的 Eclipse CDT。

我是否正确增加了 cc1plus.exe 的堆栈大小? 有没有人知道如何继续,因为我阅读了无数的文章和主题,但我现在有点没有想法。

g++ 似乎找到并接受了我的预编译头文件:

Building file: ../src/AdvancedOgreFramework.cpp
Invoking: GCC C++ Compiler
g++ -DHAVE_W32API_H -DNO_GCC_PRAGMA -I"C:\DevelopmentTools\workspaces\workspace_cpp
\MyGame\inc" -I"C:\docs\ogre3d\CEGUI\CEGUI-0.7.6\cegui\include\falagard" -I"C:\docs 
\ogre3d\CEGUI\CEGUI-0.7.6\cegui\include\RendererModules\Ogre" -I"C:\docs\ogre3d\CEGUI
\CEGUI-0.7.6\cegui\include" -I"C:\docs\ogre3d\ogre1.8.0_mingw_sdk\OgreSDK_MinGW_v1-8-0
\include" -O0 -g3 -H -Wall -c -Winvalid-pch -MMD -MP -MF"src/AdvancedOgreFramework.d" 
-MT"src/AdvancedOgreFramework.d" -o "src/AdvancedOgreFramework.o" "../src 
/AdvancedOgreFramework.cpp"
! C:\DevelopmentTools\workspaces\workspace_cpp\MyGame\inc/Precompiled.h.gch

这是我作为预构建 make 运行以生成我的 .gch 的 makefile:

C_FLAGS = -O0 -g3 -Wall -c -MMD -MP
INC_PATH = -IC:/docs/ogre3d/ogre1.8.0_mingw_sdk/OgreSDK_MinGW_v1-8-0/include -IC:/docs
/ogre3d/CEGUI/CEGUI-0.7.6-mingw/cegui/include -IC:/docs/ogre3d/CEGUI/CEGUI-0.7.6-
mingw/cegui/include/RendererModules/Ogre -IC:/docs/ogre3d/CEGUI/CEGUI-0.7.6-mingw/cegui
/include/falagard


all: Precompiled.h.gch

@echo 'Finished precompiling headers....'

Precompiled.h.gch: Precompiled.h    
    @echo 'Building target: $@'
g++.exe Precompiled.h $(INC_PATH) $(C_FLAGS)     

clean:
rm Precompiled.h.gch

.gch 的大小超过 169 MB,因为我正在尝试预编译大部分 Ogre3D 和 CEGUI 头文件。

谢谢你, 亚当。

【问题讨论】:

标签: mingw precompiled-headers stack-size


【解决方案1】:

关于您的问题,有一份 GCC 的错误报告,请参阅:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56926,看起来很大的 pch 文件(通常大于 150M)会导致此问题。

编辑:2015-05-31。我最近在 GCC 源代码中为 mingw 或 mingw-w64 工具链找到了 pch 文件的硬限制值,即 128M。我想建议有人构建一个最近的 GCC,看看它是否解决了这个崩溃问题。请参阅我在 mingw-w64 论坛中的帖子:[Mingw-w64-public] Set a larger pch file size limit? was : can anyone supply a debug version of cc1plus.exe?

编辑:2015-06-02。我可以通过扩大 pch 文件的硬限制值来完全解决这个问题,请参阅我在 gcc bugzilla 中的Comment 17

【讨论】:

  • @ollydbg12 并且该报告已有一年多的历史了……看起来 gcc 的人们在解决这个问题上遇到了困难……也许他们需要继续这样做并提供赏金:P
  • 这是一个好消息:MinGW-w64 - for 32 and 64 bit Windows - Browse /Toolchains targetting Win32/Personal Builds/mingw-builds/5.2.0 at SourceForge.net 此版本包含 pch 崩溃修复补丁,并且运行良好。
  • @ollydbg12 现在它只需要将其放入 code::blocks 的捆绑 mingw 中,最高版本可能只有 gcc (tdm-2) 4.8.1 并且在 code::blocks 的前沿/custom/unstable 发行版
  • 我不确定,但也许下一个 TDM gcc 版本会应用这个补丁,并且 C::B 已经捆绑 TDM gcc 很长时间了
【解决方案2】:

我遇到了类似的问题,通过更新mingw解决了:

  1. 运行 shell(cmd 或 sh)
  2. 更新包列表:

    mingw-get update

  3. 本次运行升级后

    mingw-get upgrade

在此之后,您的 mingw 包应该升级到最新版本,您应该能够通过错误。

【讨论】:

    猜你喜欢
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多