我最近做了一个类项目,我必须用 G + + 编写一个程序。
我使用了一个 makefile,由于某种原因,它偶尔会留下一个.h.gch 文件。
有时候,这并不影响编译,但是经常会导致编译器为已经修复或没有意义的问题发出错误。
我有两个问题:
1)什么是.h.gch 文件? 这个文件用来做什么
2)为什么在没有清理干净的情况下会出现这样的问题?
这是海湾合作委员会的预编译头。
维基百科有一个不错的解释,http://en.wikipedia.org/wiki/Precompiled_header
A)它们是预编译的标题: Http://gcc.gnu.org/onlinedocs/gcc/precompiled-headers.html
B)它们包含来自。H 文件,并应更新每次更改各自。H 档案。如果它没有发生-您在项目中设置了错误的依赖项
ABc0文件是一个预编译头。
如果没有找到 .gch,那么将使用普通的头文件。
.gch
但是,如果您的项目被设置为生成预编译头,那么如果它们不存在,将生成它们,并在下一个构建中使用它们。
有时 *.h.gch会被破坏或包含过时的信息,所以删除该文件并重新编译它应该修复它。
*.h.gch
如果您想了解一个文件,只需在终端上键入
file filename
file a.h.gch给出:
file a.h.gch
GCC precompiled header (version 013) for C
关于 gch 文件是什么,其他答案是完全准确的。然而,上下文(在本例中,使用 g + + 的初学者)就是一切。在这种情况下,有两条规则:
永远,永远,永远不要。G + + 编译行上的 h 文件。只是。Cpp 文件。如果。H 文件是否偶然编译,删除任何 * 。Gch 文件
永远不要将.cpp 文件放在 # include 语句中。
如果违反了第一条规则,那么在某个时候问题中描述的问题就会出现。 如果违反了第二条规则,链接器将在某个时刻抱怨多重定义的符号。