我更新到Visual Studio 2015 Update 1但是现在我在编译64位版本配置时遇到以下错误,一切都适用于32位和/或调试版本。
public interface ICommand {
void Do();
void Undo();
}
错误不是针对我的每个项目而是针对某些项目发生的。
实际上不可能简化指定的位置,编译器崩溃的位置通常只是一个非常简单的单行函数,同样更改此代码会导致在不同位置出现相同的错误。据我所知,它必须做一些优化和内联。但改变优化选项也无济于事。
有人能指出我如何找到真正有问题的代码或一些编译器选项以避免此错误吗?
我不相信更新已被破坏。
答案 0 :(得分:3)
升级到MSVC 2015更新1后,我们在其中一个项目中遇到了C1001。
通过反复试验,我们已将ClCompile/AssemblerOutput
属性确定为我们案件中的罪魁祸首。删除此属性不再导致C1001
来源:https://trac.osgeo.org/mapguide/ticket/2580
2016年4月6日更新:我尝试使用MSVC 2015 Update 2构建同一个项目而不删除ClCompile/AssemblerOutput
属性,在构建此项目时我不再获得C1001。我认为Update 2修复了它。
答案 1 :(得分:1)
尝试将项目优化设置为已禁用(/ Od),它可以解决问题。
在Visual Studio开发中设置此编译器选项 环境
- 打开项目的“属性页”对话框。
- 单击C / C ++文件夹。
- 单击“优化”属性页。
- 修改优化属性。
醇>
来源:https://msdn.microsoft.com/en-us/library/aafb762y.aspx
我希望我的回答支持你的问题。
答案 2 :(得分:1)
Repro在Release | x64中编译JSON库。 Config设置为最大化速度(/ O2),但General使用" No Whole Program Optimization"。 改变"没有整个程序优化"使用链接时间代码生成(我相信标志是/ LTCG)成功构建。
答案 3 :(得分:1)
我们在将公司的代码库从VC10转换为VC14时遇到了这个问题。在我们的示例中,在打开Assembler Output的同时启用了定位x64和SEH(/EHa
)时出现问题。在编译代码中调用流插入运算符(即std::cout::operator<<
)时,似乎发生了错误。
在我们的例子中,动态链接CRT而不是静态链接它(即/MT
而不是/MD
)似乎可以在不禁用汇编程序输出的情况下解决问题。这不是我在静态链接的CRT中发现的第一个问题(例如,它在MFC中调整CPane窗口大小时也会导致丢失游标)。
这是向微软报道的(https://connect.microsoft.com/VisualStudio/feedback/details/2216490/compiler-crashes-at-string-stream-insertion-operator),但两个半月之后,似乎他们甚至没有看过它......
编辑:根据Micrsoft的说法,VS2015 Update 2解决了这个问题。它在我们的代码库上进行了测试。