Visual Studio 2005 — Фатальная ошибка C ++ C1382: файл PCH ‘file’ был перестроен с момента создания obj. Пожалуйста, восстановите этот объект

Кто-нибудь сталкивался с этой ошибкой при компиляции в C ++?

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

Я Google решение и MSDN предложил мне сделать две вещи:

  1. При использовании / LTCG компилятор обнаружил файл .pch, более новый, чем CIL .obj, который указывает на него. Информация в файле CIL .obj устарела. Восстановите объект.

  2. C1382 также может возникать, если вы компилируете с / Yc, но также передаете компилятору несколько файлов исходного кода. Чтобы решить эту проблему, не используйте / Yc при передаче нескольких файлов исходного кода компилятору.

Я сделал вариант 1, но компилятор включил его сам.

Для варианта 2, как мне узнать, передам ли я несколько файлов исходного кода компилятору?

Я не могу отключить параметр / Yc, так как все другие проекты в моем рабочем приложении включили параметр / Yc … только мой проект имеет эту проблему.

Кто-нибудь знает лучшее решение?

Спасибо!

3

Решение

Просто перестройте все решение.

2

Другие решения

В VS2005 есть известная ошибка (к сожалению, мне не на что ссылаться). Чтобы это исправить, вы должны поместить stdafx.cpp поверх других файлов cpp в файле vcproj. Эта ошибка исправлена ​​в 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>

PS

Это плавающая проблема, которая будет происходить время от времени.

0

У нас возникла эта проблема на работе, когда мы использовали QT Moc для создания файлов moc на этапе предварительной сборки и изменения содержимого stdafx.h, которое было включено с помощью аргумента команды / fi, мы обнаружили, что VS2008 Win32 компилятор не не поднимать эту ошибку, но компилятор VS2008 ARMv4i сделал.

мы могли бы добавить зависимость от stdafx.h к правилу шага перед сборкой, но это не решило, изменились ли включенные в него stdafx.h, так что пока наше решение — принудительная очистка / перестройка.

0
По вопросам рекламы [email protected]