3

有人在用 C++ 编译时遇到这个错误吗?

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

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

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

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

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

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

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

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

谢谢!

4

3 回答 3

2

只需重建整个解决方案。

于 2012-12-14T18:07:41.020 回答
0

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

例如在 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>

附言

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

于 2013-04-08T12:53:39.290 回答
0

我们一直在工作中遇到这个问题,当我们使用 QT Moc 在预构建步骤中制作 moc 文件并且 stdafx.h 内容更改时,通过 /fi 命令参数包含这些内容,我们发现 VS2008 Win32 编译器没有不会引发此错误,但 VS2008 ARMv4i 编译器会引发此错误。

我们可以在预构建步骤规则中添加对 stdafx.h 的依赖,但是如果 stdafx.h 包含的内容发生更改,这并不能解决,所以现在重新强制清理/重建是我们的解决方案。

于 2014-11-26T21:48:01.950 回答