在C ++中编译时是否有人遇到此错误?
Fatal Error C1382: the PCH file 'file' has been rebuilt since 'obj' was generated. Please rebuild this object
我谷歌解决方案,msdn建议我必须做两件事:
使用/ LTCG时,编译器检测到一个比指向它的CIL .obj更新的.pch文件。 CIL .obj文件中的信息已过期。重建对象。
- 醇>
如果使用/ Yc编译,也会发生C1382,但也会将多个源代码文件传递给编译器。要解决此问题,请在将多个源代码文件传递给编译器时不要使用/ Yc。
我做了选项1,但编译器自己打开了它。
对于选项2,我如何知道我是否将多个源代码文件传递给编译器?
我无法关闭/ Yc选项,因为我的工作应用程序中的所有其他项目都打开了/ Yc选项...只有我的项目有这个问题。
有谁知道更好的解决方案?
谢谢!
答案 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包含的内容发生了变化,则无法解决,所以现在重新强制清理/重建是我们的解决方案。