Recentemente, tive um projeto de classe onde tive que fazer um programa com G ++.
Eu usei um makefile e por algum motivo ele ocasionalmente deixava um arquivo .h.gch para trás.
Às vezes, isso não afetava a compilação, mas de vez em quando resultava no compilador emitindo um erro para um problema que foi corrigido ou que não fazia sentido.
Eu tenho duas perguntas:
1) O que é um arquivo .h.gch e para que ele é usado? e
2) Por que causaria tantos problemas se não foi limpo?
Respostas:
Um
.gch
arquivo é um cabeçalho pré-compilado.Se a
.gch
não for encontrado, os arquivos de cabeçalho normais serão usados.No entanto, se o seu projeto estiver configurado para gerar cabeçalhos pré-compilados, ele os fará se não existirem e os usará na próxima compilação.
Às vezes, o
*.h.gch
arquivo fica corrompido ou contém informações desatualizadas, portanto, excluir o arquivo e compilá-lo novamente deve corrigir o problema.fonte
Se você quiser saber sobre um arquivo, basta digitar no terminal
file a.h.gch
dá:fonte
.h.gch
arquivo. Suspeito que você precisa de arquivos de banco de dados adequados para isso.É um cabeçalho pré-compilado do GCC.
A Wikipedia tem uma explicação meio decente, http://en.wikipedia.org/wiki/Precompiled_header
fonte
a) Eles são cabeçalhos pré-compilados: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b) Eles contêm informações "em cache" de arquivos .h e devem ser atualizados sempre que você alterar o respectivo arquivo .h. Se isso não acontecer - você tem dependências erradas definidas em seu projeto
fonte
Outras respostas são completamente precisas em relação ao que é um arquivo gch. No entanto, o contexto (neste caso, um iniciante usando g ++) é tudo. Nesse contexto, existem duas regras:
Nunca, jamais, coloque um arquivo .h em uma linha de compilação g ++. Apenas arquivos .cpp. Se um arquivo .h for compilado acidentalmente, remova quaisquer arquivos * .gch
Nunca, jamais, coloque um arquivo .cpp em uma instrução #include.
Se a regra um for quebrada, em algum momento o problema descrito na pergunta ocorrerá. Se a regra dois for quebrada, em algum ponto o vinculador reclamará sobre símbolos definidos de forma múltipla.
fonte