最近、G ++でプログラムを作成しなければならないクラスプロジェクトがありました。メイクファイルを使用しましたが、何らかの理由で.h.gchファイルが残されることがありました。時々、これはコンパイルに影響しませんでしたが、しばしば修正された、または意味をなさない問題に対してコンパイラがエラーを発行する結果になりました。 2つの質問があります。
1).h.gchファイルとは何ですか?そして
2)クリーンアップされていないのに、なぜこのような問題が発生するのですか?
助けてくれてありがとう。
.gch
ファイルはプリコンパイル済みヘッダーです。
もし .gch
が見つからない場合、通常のヘッダーファイルが使用されます。
ただし、プロジェクトがプリコンパイル済みヘッダーを生成するように設定されている場合、ヘッダーが存在しない場合は作成され、次のビルドで使用されます。
時々*.h.gch
は破損するか、古い情報を含むため、そのファイルを削除して再度コンパイルすると修正されるはずです。
ファイルについて知りたい場合は、単にターミナルで入力してください
file filename
file a.h.gch
与えるもの:
GCC precompiled header (version 013) for C
そのGCCプリコンパイル済みヘッダー。
ウィキペディアには半分まともな説明があります http://en.wikipedia.org/wiki/Precompiled_header
a)プリコンパイル済みヘッダー: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b).hファイルからの「キャッシュされた」情報が含まれており、それぞれの.hファイルを変更するたびに更新する必要があります。起こらない場合-プロジェクトに間違った依存関係が設定されている
他の答えは、gchファイルとは完全に正確です。ただし、コンテキスト(この場合、g ++を使用する初心者)がすべてです。このコンテキストでは、2つのルールがあります。
。++ファイルをg ++コンパイル行に配置しないでください。 .cppファイルのみ。 .hファイルが誤ってコンパイルされた場合は、*。gchファイルを削除してください
#includeステートメントに.cppファイルを入れないでください。
ルール1が破られると、ある時点で質問で説明されている問題が発生します。ルール2が破られると、ある時点で、リンカーは多重定義されたシンボルについて文句を言います。