web-dev-qa-db-ja.com

.h.gchファイルとは何ですか?

最近、G ++でプログラムを作成しなければならないクラスプロジェクトがありました。メイクファイルを使用しましたが、何らかの理由で.h.gchファイルが残されることがありました。時々、これはコンパイルに影響しませんでしたが、しばしば修正された、または意味をなさない問題に対してコンパイラがエラーを発行する結果になりました。 2つの質問があります。

1).h.gchファイルとは何ですか?そして

2)クリーンアップされていないのに、なぜこのような問題が発生するのですか?

助けてくれてありがとう。

105
mnuzzo

.gchファイルはプリコンパイル済みヘッダーです。

もし .gchが見つからない場合、通常のヘッダーファイルが使用されます。

ただし、プロジェクトがプリコンパイル済みヘッダーを生成するように設定されている場合、ヘッダーが存在しない場合は作成され、次のビルドで使用されます。

時々*.h.gchは破損するか、古い情報を含むため、そのファイルを削除して再度コンパイルすると修正されるはずです。

104
Dunewalker

ファイルについて知りたい場合は、単にターミナルで入力してください

file filename

file a.h.gch与えるもの:

GCC precompiled header (version 013) for C
33
riteshkasat

そのGCCプリコンパイル済みヘッダー。

ウィキペディアには半分まともな説明があります http://en.wikipedia.org/wiki/Precompiled_header

20
Goz

a)プリコンパイル済みヘッダー: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

b).hファイルからの「キャッシュされた」情報が含まれており、それぞれの.hファイルを変更するたびに更新する必要があります。起こらない場合-プロジェクトに間違った依存関係が設定されている

15

他の答えは、gchファイルとは完全に正確です。ただし、コンテキスト(この場合、g ++を使用する初心者)がすべてです。このコンテキストでは、2つのルールがあります。

  1. 。++ファイルをg ++コンパイル行に配置しないでください。 .cppファイルのみ。 .hファイルが誤ってコンパイルされた場合は、*。gchファイルを削除してください

  2. #includeステートメントに.cppファイルを入れないでください。

ルール1が破られると、ある時点で質問で説明されている問題が発生します。ルール2が破られると、ある時点で、リンカーは多重定義されたシンボルについて文句を言います。

11
tgibson