J'ai récemment eu un projet de classe où je devais créer un programme avec G ++.
J'ai utilisé un makefile et pour une raison quelconque, il a parfois laissé un fichier .h.gch derrière.
Parfois, cela n'affectait pas la compilation, mais de temps en temps, le compilateur produisait une erreur pour un problème qui avait été corrigé ou qui n'avait pas de sens.
J'ai deux questions:
1) Qu'est-ce qu'un fichier .h.gch et à quoi sert-il? et
2) Pourquoi causerait-il de tels problèmes quand il n'était pas nettoyé?
Réponses:
Un
.gch
fichier est un en-tête précompilé.Si un
.gch
n'est pas trouvé, les fichiers d'en-tête normaux seront utilisés.Cependant, si votre projet est configuré pour générer des en-têtes pré-compilés, il les créera s'ils n'existent pas et les utilisera dans la prochaine génération.
Parfois, le
*.h.gch
fichier sera corrompu ou contiendra des informations obsolètes, donc la suppression de ce fichier et sa recompilation devraient le corriger.la source
Si vous voulez connaître un fichier, tapez simplement sur le terminal
file a.h.gch
donne:la source
.h.gch
fichier. Je soupçonne que vous avez besoin de fichiers de base de données appropriés pour cela.C'est un en-tête précompilé GCC.
Wikipedia a une explication à moitié décente, http://en.wikipedia.org/wiki/Precompiled_header
la source
a) Ce sont des en-têtes précompilés: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b) Ils contiennent des informations «mises en cache» à partir de fichiers .h et doivent être mis à jour chaque fois que vous modifiez le fichier .h respectif. Si cela ne se produit pas, vous avez de mauvaises dépendances définies dans votre projet
la source
D'autres réponses sont tout à fait exactes en ce qui concerne ce qu'est un fichier gch. Cependant, le contexte (dans ce cas, un débutant utilisant g ++) est tout. Dans ce contexte, il existe deux règles:
Jamais, jamais, jamais mettre un fichier .h sur une ligne de compilation g ++. Seuls les fichiers .cpp. Si un fichier .h est compilé accidentellement, supprimez tous les fichiers * .gch
Jamais, jamais, jamais mettre un fichier .cpp dans une instruction #include.
Si la règle 1 est enfreinte, le problème décrit dans la question se produira à un moment donné. Si la règle deux est enfreinte, à un moment donné, l'éditeur de liens se plaindra de symboles à définition multiple.
la source