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