der*_*her 5 c++ mixed-mode compiler-errors precompiled-headers visual-studio-2015
我不时(并非每次)都收到此错误消息,我在混合模式项目中进行了编译(编辑:对不起,我在这里并没有明确指出:我的意思是“重建”)。而且Visual Studio告诉我“使用'-Zm114'或更高版本的命令行选项重新编译”。原则上没问题,我只是按照VS告诉我的那样做。
但是目前,这有两个问题:
为什么在每次重建时都不会发生?如果我理解正确,则编译器在编译项目时会耗尽内存。因此,如果我进行重建以清理所有先前的工作,如果我什么都没做,它下次是否也不会耗尽内存?
为了安全起见,我已经Zm120在该项目的所有配置中为Zm(即)指定了120的值。为什么我收到一个错误消息,该值较低?还是114的建议值只是对VS的疯狂猜测?
Sco*_*ott 13
我知道这很旧,但我最终来到了这里,所以我不妨回答一下。
有一个关于PCH的问题一个伟大的文章在这里。
1)为什么不是每次我进行重建时都会发生?
肯定回答这个有点复杂。由于它不是每次都发生,因此可能有几个问题。这很可能是由于内存分配。从文章:
- 在 CL.EXE 能够将其加载到内存之前,PCH 所需的虚拟内存地址范围的碎片化。
- Windows 操作系统在重负载下无法在特定时间阈值内增加页面文件大小。
它也可能是页面文件大小问题(最有可能在虚拟机上),但我相信您会收到类似于以下内容的消息:
c1xx:错误 C3859:无法为 PCH [...Project.vcxproj] 创建虚拟内存 c1xx:注意:系统返回代码 1455:页面文件太小,无法完成此操作
2)为什么我会收到具有较低值的错误消息?(Zm114 而不是 Zm120)
确保 Zm120 修改处理所有构建配置(发布|调试)和平台(x86|x64)。
将 PreferredToolArchtecture 设置为 x64 也有帮助:
如果您从命令行使用 MSBuild,则可以将 /p:PreferredToolArchtecture=x64 传递给 MSBuild。如果在 Visual Studio 中使用 MSBuild 进行构建,则可以编辑 .vcxproj 文件以包含包含此属性的 PropertyGroup。
这个很容易被忽略,但是当预编译头太大时也会出现这种问题。做一点清理也可能是个好主意。