致命错误C1001:编译器中发生内部错误

时间:2011-08-16 10:01:51

标签: visual-c++ compiler-construction 64-bit

在x64平台上进行编译时出现以下错误:

c:\codavs05\hpsw-sc\ovpacc\tools\codaaccesstest\coda_access.cpp(1572): fatal error C1001: An internal error has occurred in the compiler.

(compiler file 'f:\dd\vctools\compiler\utc\src\p2\sizeopt.c', line 55)
To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information

------ Build started: Project: asyncexample, Configuration: Release Win32 ------

如果我将设置更改为预处理器文件(是),我没有收到任何错误。

关于我的环境:将Microsoft Visual Studio 2005升级到2010

请帮忙。

14 个答案:

答案 0 :(得分:9)

我在VC ++中多次遇到过这个错误。执行以下步骤。他们总是帮我解决这个问题:

  1. 查看编译错误指出的确切位置。
  2. 查找该位置使用的任何外部类型或类。
  3. 更改在步骤2中找到的那些文件的“包含路径”的顺序,然后重建解决方案。
  4. 我希望有帮助!!!!

答案 1 :(得分:8)

我和VC2012有同样的错误。设置项目属性优化到禁用(/ Od)解决了问题。

答案 2 :(得分:5)

在Windows中本地构建时,我遇到了VS2015的这个问题。

为了解决这个问题,我删除了我的构建文件夹(在Properties / General中看到的输出目录)并重建了项目。

在构建期间发生奇怪的事情时,这似乎总是有帮助。

答案 3 :(得分:3)

在我的解决方案中,我删除了项目的输出dll文件,并且我已经进行了项目重建。

答案 4 :(得分:2)

我遇到了同样的错误,花了很多时间寻找问题。最后我发现错误指向的函数有一个无限的while循环。修复了这个错误并且错误消失了。

答案 5 :(得分:2)

在我的例子中是使用带有QStringList参数的静态lambda函数。如果我评论了编译文件使用QStringList的区域,否则编译器会报告C1001错误。将lambda函数更改为非静态函数解决了这个问题(显然,其他选项可能是在匿名命名空间或类的静态私有方法中使用全局函数)。

答案 6 :(得分:2)

我使用VS2017的boost库得到了这个错误。清理解决方案并重建它,解决了这个问题。

答案 7 :(得分:1)

从VS2008升级到VS2010时,我也遇到了这个问题。

要修复,我必须安装VS2008补丁(KB976656)。

也许VS2005有类似的补丁?

答案 8 :(得分:1)

我遇到了同样的错误,但在VS 2015 / x64 / Win7版本的错误消息中引用了不同的文件。在我的例子中,文件是main.cpp。为我修复它就像重建所有内容一样简单(并且在处理了数百万行代码时找到了别的事情)。

更新:原因是我的硬盘驱动器出现故障。在其他症状促使我运行chkdsk之后,我发现被替换的大部分坏扇区都是.obj,.pdb和其他编译器生成的文件。

答案 9 :(得分:1)

我在重构过程中使用代码得到了这个,并且缺乏关注(并且使用模板,这是造成ICE而不是正常编译时错误的情况)

简化代码:

void myFunction() {
    using std::is_same_v;
    for (auto i ...) {
       myOtherFunction(..., i);
    }
}

void myOtherFunction(..., size_t idx) {
    // no statement using std::is_same_v;
    if constexpr (is_same_v<T, char>) {
        ...
    }
}

答案 10 :(得分:0)

当我编译为x64目标时出现此错误。 更改为x86让我编译该程序。

答案 11 :(得分:0)

有时可以帮助重新排序代码。我曾在Visual Studio 2013中遇到此错误,并且只能通过重新排序该类的成员来解决(我有一个枚举成员,几个字符串成员和同一枚举类的一些其他枚举成员。只有在我输入首先是枚举成员)。

答案 12 :(得分:0)

就我而言,这是导致问题的原因:

std::count_if(data.cbegin(), data.cend(), [](const auto& el) { return el.t == t; });

auto更改为显式类型可以解决此问题。

答案 13 :(得分:0)

切换到C ++ 17后,Visual Studio 2017也有类似的问题:

boost/mpl/aux_/preprocessed/plain/full_lambda.hpp(203): fatal error C1001: An internal error has occurred in the compiler.
1>(compiler file 'msc1.cpp', line 1518)
1> To work around this problem, try simplifying or changing the program near the locations listed above.

通过使用Visual Studio 2019解决。