什么是.h.gch文件?

时间:2009-08-06 20:57:25

标签: c++ g++

我最近有一个课程项目,我必须用G ++制作一个程序。我使用了一个makefile,由于某种原因,它偶尔会留下一个.h.gch文件。有时,这不会影响编译,但是每次都会导致编译器针对已修复或没有意义的问题发出错误。我有两个问题:

1)什么是.h.gch文件以及用于什么?和

2)为什么在没有清理时会引起这样的问题?

感谢您的帮助。

5 个答案:

答案 0 :(得分:104)

.gch文件是预编译的标头。

如果未找到.gch,则将使用正常的头文件。

但是,如果您的项目设置为生成预编译的头文件,那么如果它们不存在则会生成它们并在下一个版本中使用它们。

有时*.h.gch会被破坏或包含过时信息,因此删除该文件并再次编译它应修复它。

答案 1 :(得分:32)

如果您想了解某个文件,只需在终端上输入

即可
file filename

file a.h.gch给出:

GCC precompiled header (version 013) for C

答案 2 :(得分:20)

它是一个GCC预编译头。

维基百科有一个不错的解释,http://en.wikipedia.org/wiki/Precompiled_header

答案 3 :(得分:15)

a)他们是预编译的标题: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

b)它们包含来自.h文件的“缓存”信息,每次更改相应的.h文件时都应更新。如果没有发生 - 您的项目中设置了错误的依赖项

答案 4 :(得分:10)

关于gch文件是什么,其他答案是完全准确的。但是,上下文(在这种情况下,使用g ++的初学者)就是一切。在这种情况下,有两个规则:

  1. 永远不会将.h文件放在g ++编译行上。只有.cpp文件。如果偶然编译.h文件,请删除任何* .gch文件

  2. 永远不要将.cpp文件放在#include语句中。

  3. 如果规则1被破坏,则在某个时候问题中描述的问题将会发生。 如果规则2被破坏,那么链接器会在某个时候抱怨多重定义的符号。