Visual c++ 致命错误C1001:编译器中发生内部错误
在x64平台上编译时,我遇到以下错误:Visual c++ 致命错误C1001:编译器中发生内部错误,visual-c++,compiler-construction,64-bit,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
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
请帮助。我在VC++中多次遇到这个错误。执行以下步骤。他们有时帮助我解决这个问题:
从VS2008升级到VS2010时,我也遇到了这个问题 要修复此问题,我必须安装VS2008修补程序(KB976656)
也许VS2005也有类似的补丁?我在VC2012上遇到了同样的错误。将project properties Optimization设置为Disabled(/Od)解决了这个问题。我遇到了同样的错误,并且花了相当多的时间寻找这个问题。最后我发现错误指向的函数有一个无限while循环。修复了这个问题,错误消失了。在VS 2015/x64/Win7版本中,我遇到了相同的错误,但错误消息中引用了不同的文件。在我的例子中,文件是main.cpp。对我来说,修复它就像重新构建所有代码一样简单(并且在处理超过百万行的代码时找到其他的事情来做)
更新:原来根本原因是我的硬盘出现故障。在其他症状促使我运行chkdsk之后,我发现被替换的大部分坏扇区都位于.obj、.pdb和其他编译器生成的文件中。在我的例子中,是使用带有
QStringList
参数的静态lambda函数。如果我对使用QStringList
的区域进行了注释,则编译的文件将被编译,否则编译器将报告C1001错误。将lambda函数更改为非静态解决了问题(显然,其他选项可能是在匿名命名空间中使用全局函数或类的静态私有方法)。在我的解决方案中,我删除了项目的输出dll文件,我进行了项目重建。在Windows中本地构建时,我遇到了VS2015的问题
为了解决这个问题,我删除了我的构建文件夹(在Properties/General中看到的输出目录)并重建了项目。
当构建过程中发生奇怪的事情时,这似乎总是有帮助的。我在编译到x64目标时遇到了这个错误。
改用x86让我编译这个程序。我在重构过程中不小心用代码得到了这个程序(对于模板,这是导致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>) {
...
}
}
void myFunction(){
使用std::是否相同;
对于(自动i…){
肌功能(…,i);
}
}
无效的myOtherFunction(…,大小\u t idx){
//没有使用std::is_-same_-v的语句;
如果constexpr(是否相同){
...
}
}
我在VS2017中使用boost库时遇到此错误。清理解决方案并重新构建,解决了问题。有时有助于重新排序代码。我在Visual Studio 2013中曾经出现过此错误,只有通过对类的成员重新排序才能解决此问题(我有一个枚举成员、几个字符串成员和多个相同枚举类的枚举成员。它只有在我将枚举成员放在第一位后才进行编译)。在我的例子中,这导致了问题:
std::count_if(data.cbegin(), data.cend(), [](const auto& el) { return el.t == t; });
将
auto
更改为显式类型修复了该问题。在切换到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解决。可能与另一个编译器错误重复,但位置不同。不是完全重复的。@venkat-也许我们可以看到第1572行的代码?如果(t2.GetSecond()!=sec | | t2.getmillisond()!=mili)这里我遇到了错误。这样做对我来说很有效,但我想问题可能是该值太小了。将优化设置为/Ox也有效。对我来说,快速修复方法是禁用包含有问题源代码行的函数的优化。因此,在有问题的函数之前添加#pragma optimize(“,off”),在函数末尾添加#pragma optimize(“,on”)。查看更多: