C ++致命错误C1382:自生成“obj”以来,PCH文件“文件”已重建。请重建此对象

时间:2012-12-14 18:05:47

标签: c++ visual-studio-2005

在C ++中编译时是否有人遇到此错误?

Fatal Error C1382: the PCH file 'file' has been rebuilt since 'obj' was generated. Please rebuild this object

我谷歌解决方案,msdn建议我必须做两件事:

  
      
  1. 使用/ LTCG时,编译器检测到一个比指向它的CIL .obj更新的.pch文件。 CIL .obj文件中的信息已过期。重建对象。

  2.   
  3. 如果使用/ Yc编译,也会发生C1382,但也会将多个源代码文件传递给编译器。要解决此问题,请在将多个源代码文件传递给编译器时不要使用/ Yc。

  4.   

我做了选项1,但编译器自己打开了它。

对于选项2,我如何知道我是否将多个源代码文件传递给编译器?

我无法关闭/ Yc选项,因为我的工作应用程序中的所有其他项目都打开了/ Yc选项...只有我的项目有这个问题。

有谁知道更好的解决方案?

谢谢!

3 个答案:

答案 0 :(得分:2)

只需重建整个解决方案。

答案 1 :(得分:0)

VS2005中存在已知错误(不幸的是我没有任何内容可供参考)。要修复此问题,您应该将stdafx.cpp放在vcproj文件中的其他cpp文件之上。此错误已在VS2008及更高版本中修复。

E.g。在vcproj中你会有这样的东西:

<Files>
  <Filter Name="Source Files" ...>
    <File RelativePath=".\file1.cpp"> .. </File>
    <File RelativePath=".\file2.cpp"> .. </File>
    <File RelativePath=".\stdafx.cpp"> .. </File>
...
</Filter>    
...
</Files>

你应该成功:

<Files>
  <Filter Name="Source Files" ...>
    <File RelativePath=".\stdafx.cpp"> .. </File>
    <File RelativePath=".\file1.cpp"> .. </File>
    <File RelativePath=".\file2.cpp"> .. </File>
...
</Filter>    
...
</Files>

PS

这是一个不时发生的浮动问题。

答案 2 :(得分:0)

我们一直在使用这个问题,当我们使用QT Moc在预构建步骤中制作moc文件并且stdafx.h内容发生变化时,通过/ fi命令参数进行了包含,我们发现了VS2008 Win32编译器没有引发此错误,但VS2008 ARMv4i编译器确实如此。

我们可以将stdafx.h的依赖项添加到预构建步骤规则中,但如果stdafx.h包含的内容发生了变化,则无法解决,所以现在重新强制清理/重建是我们的解决方案。