したがって、メインが定義されているソース mainClass.c があります。ヘッダー ファイル class1.h と、class1.c に class1.h で定義されたすべての関数の実装があります。class1.h には cond と mutex という名前の 2 つの変数 (グローバル) があり、現在は class1.c で使用されており、将来的には mainClass.c でも使用する予定です。ここで、すべてのソース ファイルをコンパイルして 1 つのオブジェクト ファイルを生成するために、次のようにしています。
gcc -Wall -pthread -I/home/2008/ariarad/mainClass1 mainClass1.c class1.c -o out
/home/2008/ariarad/mainClass1 は、すべてのヘッダー ファイルとソース ファイルがある場所で、.c ファイルの 1 つで pthead.h を使用しています。私はそこにそれを含めましたが、文句を言うので、含めなければなりませんでした。
上記のコマンドを実行すると、次のエラーが表示されます。
class1.c:3:16: error: redefinition of ‘cond’
class1.h:66:16: note: previous definition of ‘cond’ was here
class1.c:4:17: error: redefinition of ‘mutex’
class1.h:67:17: note: previous definition of ‘mutex’ was here
複数の包含を避けるために、class1.h を囲む ifndef および endif ブロックがある場合に備えて。ヘッダー ファイルで定義された変数を .c ファイルで再定義することは絶対にありません。それでもエラーが発生する理由を教えてください。