我刚刚将Microsoft Visual Studio Enterprise 2015从Update 2升级到Update 3,现在我收到以下错误:
致命错误C1001:编译器中发生内部错误。 (编译器文件'f:\ dd \ vctools \ compiler \ utc \ src \ p2 \ wvm \ mdmiscw.c',第2687行) 若要解决此问题,请尝试简化或更改上面列出的位置附近的程序。 请在Visual C ++帮助菜单上选择技术支持命令,或打开技术支持帮助文件以获取更多信息
该位置是包含标题的第一行。该项目有设置
/ FR“x64 \ Debug \”/ GS / W3 / Zc:wchar_t / Zi / Od /Fd"x64\Debug\vc140.pdb“ / Zc:inline / fp:precise / D“WIN32”/ D“_DEBUG”/ D“_WINDLL”/ D “_UNICODE”/ D“UNICODE”/ errorReport:prompt / WX- / Zc:forScope / clr [some / FU“...”] / MDd / Fa“x64 \ Debug \”/ EHa / nologo / Fo“x64 \ Debug \” / FP “.... PCH”
如何重新构建项目?
答案 0 :(得分:6)
C1001基本上表示编译器崩溃,即您可能已经创建了有效的C / C ++代码,可以触发VC编译器中的错误。通过https://connect.microsoft.com/VisualStudio/Feedback提交错误报告以供Microsoft进一步调查可能是个好主意。
我在使用Visual Studio Express 2015 Update 3编译OpenCV时遇到了C1001。在我的例子中,C1001错误消息也指向了触发编译器崩溃的OpenCV核心代码行。在查看该特定行的实际代码语义之后,我怀疑编译器的浮点处理是问题的根本原因。它正在处理一个大的,硬编码的双数组查找表,这可能导致舍入问题。 (以防万一有人谷歌这个,我在这里列出了引用:opencv_core,mathfuncs_core.cpp,第1261行,LOGTAB_TRANSLATE
的宏扩展。)
在我的例子中,设置编译器的浮点模型来自'' exact'到了严格的'解决了C1001问题。但是,由于您还没有包含导致C1001加注的行的代码片段,因此很难说上述内容是否也会解决您的问题。如果您想尝试一下,可以在 项目设置/ C / C ++ /代码生成 选项卡中找到编译器开关。而不是 精确(/ fp:精确) ,选择 严格(/ fp:strict) 作为浮点模型。此更改可能会影响代码的性能,但不应影响其精度。有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/e7s85ffb.aspx。
答案 1 :(得分:1)
根据visual studio developers community, 此问题已修复且已关闭(于2019年7月),并且不应出现在最新的VS版本中。因此,升级到最新版本应该可以解决问题。
但是,我刚刚将VS升级到了最新版本(16.7.1),但仍然遇到此问题,并出现致命错误C1001:内部编译器错误。
最后,以下解决方案对我有用: 将优化选项(项目属性-> C / C ++->优化)更改为“自定义”,然后在(项目属性-> C / C ++->命令行)添加“ / Ob2,/ Oi,/ Os, / Oy'。