2013-02-17 13 views
5

私はmainが定義されているmainClass.cソースを持っています。私はヘッダファイルclass1.hとclass1.cのclass1.hで定義されているすべての関数の実装を持っています。私は現在class1.cで使用されているcond1とmutexという名前のclass1.hに2つの変数(グローバル)を持っていますが、将来私はmainClass.cでもそれを使用します。gcc linuxで複数の.cと.hファイルをコンパイルするには?

gcc -Wall -pthread -I/home/2008/ariarad/mainClass1 mainClass1.c class1.c -o out

/ホーム/ 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ファイルのヘッダーファイルで定義された変数を再定義していません。なぜ誰かが私にエラーを与えているのを助けてくれますか?

+0

#ifndef CLASS1_H_/#define CLASS1_H_/#endifの間にあなたのコードがありますか? #ifndefの定義だけでなく、 – DanChianucci

+0

のmakefileを書く必要がありますか? –

+0

@ Trump211 yup! – as3rdaccount

答えて

7

ヘッダーファイルにグローバル変数を定義することはできません。あなたは.cファイルのいずれかでそれらを定義して、ヘッダファイルでexternを使用する必要があります。.cファイルの一つで

.hファイルの一つで
int cond; 

、その必要があります変数が必要なすべての.cファイルに含めることができます。

extern int cond; 
関連する問題