Кто-нибудь сталкивался с этой ошибкой при компиляции в C ++?
Fatal Error C1382: the PCH file 'file' has been rebuilt since 'obj' was generated. Please rebuild this object
Я Google решение и MSDN предложил мне сделать две вещи:
При использовании / LTCG компилятор обнаружил файл .pch, более новый, чем CIL .obj, который указывает на него. Информация в файле CIL .obj устарела. Восстановите объект.
C1382 также может возникать, если вы компилируете с / Yc, но также передаете компилятору несколько файлов исходного кода. Чтобы решить эту проблему, не используйте / Yc при передаче нескольких файлов исходного кода компилятору.
Я сделал вариант 1, но компилятор включил его сам.
Для варианта 2, как мне узнать, передам ли я несколько файлов исходного кода компилятору?
Я не могу отключить параметр / Yc, так как все другие проекты в моем рабочем приложении включили параметр / Yc … только мой проект имеет эту проблему.
Кто-нибудь знает лучшее решение?
Спасибо!
Просто перестройте все решение.
В 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
Это плавающая проблема, которая будет происходить время от времени.
У нас возникла эта проблема на работе, когда мы использовали QT Moc для создания файлов moc на этапе предварительной сборки и изменения содержимого stdafx.h, которое было включено с помощью аргумента команды / fi, мы обнаружили, что VS2008 Win32 компилятор не не поднимать эту ошибку, но компилятор VS2008 ARMv4i сделал.
мы могли бы добавить зависимость от stdafx.h к правилу шага перед сборкой, но это не решило, изменились ли включенные в него stdafx.h, так что пока наше решение — принудительная очистка / перестройка.