146 votes

Qu'est-ce qu'un fichier .h.gch ?

J'ai récemment eu un projet de classe où je devais faire un programme avec G++.

J'ai utilisé un makefile et pour une raison quelconque, il laissait parfois un fichier .h.gch derrière lui.

Parfois, cela n'affectait pas la compilation, mais de temps en temps, le compilateur émettait 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-elle de tels problèmes alors qu'elle n'a pas été nettoyée ?

22 votes

Gcc les crée si vous lui demandez accidentellement de compiler un fichier .h. Ne faites pas cela :) (sauf si vous voulez réellement créer un en-tête précompilé)

6 votes

En dehors de la CCG monde, .gch sont appelés .pch .

141voto

Dunewalker Points 356

A .gch est un en-tête précompilé.

Si un .gch n'est pas trouvé, alors 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 compilation.

Parfois, le *.h.gch sera corrompu ou contiendra des informations périmées, donc supprimer ce fichier et le compiler à nouveau devrait résoudre le problème.

9 votes

Alors pourquoi la taille du fichier .gch est généralement si grande ?

52voto

riteshk Points 43

Si vous voulez connaître un fichier, il suffit de taper sur le terminal

file filename

file a.h.gch donne :

GCC precompiled header (version 013) for C

6 votes

Le mien (OSX, zsh) dit juste "données" pour .h.gch fichier. Je pense que vous avez besoin de fichiers de base de données appropriés pour cela.

23voto

tgibson Points 191

Les 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 y a deux règles :

  1. Ne jamais, jamais, jamais mettre un fichier .h sur une ligne de compilation g++. Seulement des fichiers .cpp. Si un fichier .h est compilé accidentellement, supprimez tous les fichiers *.gch.

  2. Ne jamais, jamais, jamais mettre un fichier .cpp dans une déclaration #include.

Si la première règle est enfreinte, le problème décrit dans la question se produira à un moment donné. Si la règle 2 est enfreinte, à un moment donné, l'éditeur de liens se plaindra de symboles définis à plusieurs reprises.

22voto

Goz Points 35007

C'est un en-tête précompilé de GCC.

Wikipedia a une explication à moitié décente, http://en.wikipedia.org/wiki/Precompiled_header

17voto

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 des fichiers .h et devraient être mis à jour chaque fois que vous modifiez un fichier .h respectif. Si ce n'est pas le cas, c'est que vous avez défini de mauvaises dépendances dans votre projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X