【问题标题】:MinGW: Internal error when building a C++ programMinGW:构建 C++ 程序时出现内部错误
【发布时间】:2020-08-21 14:49:08
【问题描述】:

我一直很舒服地用 G++17 运行 C++ 程序,但有一天,不知为什么,出现了这个错误:

mingw32_gt_pch_use_address 中的内部错误,位于 config/i386/host-mingw32.c:190:MapViewOfFileEx:尝试访问 地址无效。

下面是完整的错误输出:

[Finished in 4.5s with exit code 1]
[cmd: ['g++.exe', '-std=c++17', '-D DIV_DEBUG', 'D:\\Codes\\code.cpp', '-o', 'code.exe', '&&', 'code.exe<inputf.in>outputf.in']]
[dir: D:\Codes]
[path: C:\Python38\Scripts\;C:\Python38\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\MinGW\bin;C:\ProgramData\pbox;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\Users\asus\AppData\Local\Microsoft\WindowsApps;C:\Users\asus\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;C:\tools;C:\Users\asus\AppData\Roaming\npm;C:\Users\asus\AppData\Local\atom\bin]

我已经寻找了三天的解决方案,但还没有找到。它看起来像 MinGW 中的一个错误,但我不知道如何解决这个问题。我的最后一个选择是删除与 MinGW 相关的所有内容并重新安装。任何更好的想法都值得赞赏。

我正在尝试编译的代码。

#include <bits/stdc++.h>

int main() {
    std::cout << "Hello, World!\n";
    return 0;
}

似乎删除“bits/stdc++.h”头文件会删除此错误。我仍然想知道如何解决这个问题,因为我每天都在我的所有程序中使用这个库。

编辑:我尝试在 Windows Powershell 上构建,但出现了同样的错误。

PS D:\Codes> g++.exe -std=c++17 -D DIV_DEBUG code.cpp -o code.exe
internal error in mingw32_gt_pch_use_address, at config/i386/host-mingw32.c:190: MapViewOfFileEx: Attempt to access invalid address.

更新:尝试重新安装 MinGW。没用。

【问题讨论】:

  • 正在编译的代码是什么?
  • 更新问题以包含代码。
  • 你有你的答案,看来。不要使用那些垃圾包含。
  • @sweenish 在某种程度上,我同意您对包含作为垃圾的评估,但我发现这个问题在不同程序中的许多人都遇到过,因此没有包含。我浏览了配置文件的代码,发现某些地址的检测/分配失败。即使问题现在已经为我解决了,我仍然想知道最初是什么原因造成的。
  • 在某种程度上?这是一个垃圾包含。这是一个一切,包括厨房水槽。这意味着它会不必要地膨胀您的可执行文件。这是一个实现细节,即不是标准的一部分。编译器可能支持也可能不支持。很难知道您正在使用哪些库。这是一个垃圾包含。 stackoverflow.com/questions/31816095/…

标签: c++ sublimetext3 mingw


【解决方案1】:

好的,所以问题就像看起来一样神奇。我在重新安装 MinGW 后预编译了头文件,由于某种原因,它解决了这个问题。我不确定此操作是否触发了修复。

如果有人可以对这种奇怪的行为有所了解,我会将该答案标记为已接受。

【讨论】:

  • 你被告知使用bits/stdc++.h 可以做到这一点。它是一个不打算由用户使用的标题,因此它位于文件夹 bits 中。可悲的是,许多过时和草率的教程都提到了它。通过使用它,您的 32 位编译器内存过大,预编译它以编译时间为代价为您节省了一些内存。
猜你喜欢
  • 2018-08-20
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多