【问题标题】:How do I workaround error C1001 in visual C++ compiler?如何解决 Visual C++ 编译器中的错误 C1001?
【发布时间】:2016-11-10 23:44:01
【问题描述】:

我刚刚将 Microsoft Visual Studio Enterprise 2015 从更新 2 升级到更新 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:内联 /fp:精确 /D "WIN32" /D "_D​​EBUG" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /clr [一些 /FU"..."] /MDd /Fa"x64\Debug\" /EHa /nologo /Fo"x64\Debug\" /Fp"....pch"

如何重新构建我的项目?

【问题讨论】:

  • “要解决此问题,请尝试简化或更改程序”。
  • @MciprianM:关于这个问题的任何更新?我在使用 clr 和 vs2015 时遇到了同样的编译错误。不幸的是,该消息没有告诉我代码的哪一行导致了错误。 :(
  • @Louis:我们还没有找到错误的原因,所以我们重新安装了更新 2 之前的所有内容。我听说其他公司也有同样的问题。附带说明一下,在 Visual Studio 中安装任何东西时都应该小心,它可能将更新 3 作为依赖项,并且您可能会错误地更新为更新 3。
  • @MciprianM:感谢更新。实际上在过去的几周里,我尝试了 vs2017。错误神奇地消失了。我的项目现在处于工作状态。但是,在 vs2017 中还有一些新的问题需要处理。

标签: c++ visual-studio-2015 clr


【解决方案1】:

根据visual studio developers community, 此问题已修复并关闭(2019 年 7 月),不应出现在最新的 VS 版本中。所以升级到最新版本应该可以解决问题。

但是,我刚刚将我的 VS 升级到最新版本(16.7.1),我仍然遇到这个问题,出现致命错误 C1001:内部编译器错误。

最后,以下解决方案对我有用: 将优化选项(项目属性->C/C++->优化)更改为“自定义”并在(项目属性->C/C++->命令行')添加附加选项“/Ob2、/Oi、/Os、 /Oy'。

取自:Visual studio in stuck Generating code

【讨论】:

  • 仍在 16.9.4 中。
【解决方案2】:

C1001 基本上表示编译器崩溃,即您可能创建了触发 VC 编译器中的错误的有效 C/C++ 代码。最好通过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 的宏扩展)。

在我的例子中,将编译器的浮点模型从“精确”设置为“严格”解决了 C1001 问题。但是,由于您没有包含导致 C1001 引发的行的代码片段,因此很难说上述内容是否也能解决您的问题。如果您想尝试一下,您可以在项目设置/C/C++/代码生成选项卡中找到编译器开关。代替 Precise (/fp:precise),选择 Strict (/fp:strict) 作为浮点模型.此更改可能会影响代码的性能,但不应影响其精度。请参阅https://msdn.microsoft.com/en-us/library/e7s85ffb.aspx 了解更多信息。

【讨论】:

  • 在这种情况下,将 /arch:sse2 标志设置为 /arch:avx 并保持 /fp:precise 可以提供更好的性能。
猜你喜欢
  • 2011-08-26
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2020-12-17
  • 2021-04-06
  • 2014-06-11
相关资源
最近更新 更多