Недавно у меня был проект класса, в котором мне нужно было написать программу на G ++.
Я использовал make-файл, и по какой-то причине он иногда оставлял после себя файл .h.gch.
Иногда это не влияло на компиляцию, но время от времени это приводило к тому, что компилятор выдавал ошибку из-за проблемы, которая была исправлена или не имела смысла.
У меня два вопроса:
1) Что такое файл .h.gch и для чего он нужен? и
2) Почему это могло вызвать такие проблемы, если его не очистили?
Ответы:
.gch
Файл предкомпилированный заголовок.Если a
.gch
не найден, будут использоваться обычные файлы заголовков.Однако, если ваш проект настроен на создание предварительно скомпилированных заголовков, он создаст их, если они не существуют, и использует их в следующей сборке.
Иногда он
*.h.gch
будет поврежден или содержать устаревшую информацию, поэтому удаление этого файла и его повторная компиляция должны исправить это.источник
Если вы хотите узнать о файле, просто введите в терминале
file a.h.gch
дает:источник
.h.gch
файла. Я подозреваю, что для этого вам нужны подходящие файлы базы данных.Это предварительно скомпилированный заголовок GCC.
В Википедии есть наполовину приличное объяснение, http://en.wikipedia.org/wiki/Precompiled_header
источник
а) Это предварительно скомпилированные заголовки: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
б) Они содержат "кешированную" информацию из файлов .h и должны обновляться каждый раз, когда вы меняете соответствующий файл .h. Если этого не произошло - в вашем проекте установлены неправильные зависимости.
источник
Другие ответы полностью точны в отношении того, что такое файл gch. Однако контекст (в данном случае новичок, использующий g ++) - это все. В этом контексте есть два правила:
Никогда и никогда не помещайте файл .h в строку компиляции g ++. Только файлы .cpp. Если файл .h компилируется случайно, удалите все файлы * .gch
Никогда и никогда не помещайте файл .cpp в оператор #include.
Если правило 1 нарушено, в какой-то момент возникнет проблема, описанная в вопросе. Если правило два нарушается, в какой-то момент компоновщик будет жаловаться на многозначные символы.
источник