2013-02-17 295 views
5

所以我有一個源mainClass.c在那裏我主要的定義。我有一個頭文件class1.h以及在class1.c在class1.h定義的所有功能的實現。我在class1.h名爲COND和在class1.c被用於現在並可能在未來的互斥兩個變量(全局),我會在我的mainClass.c使用它。 我們編譯所有的源文件生成我做的事情一個目標文件,如下所示:如何編譯多個.c和.h文件在GCC Linux呢?

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

/家/ 2008/ariarad/mainClass1就是我所有的頭文件和源文件是在和我在一個.c文件中使用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_ /#定義CLASS1_H_/#ENDIF之間用你的代碼?你需要定義不只是#ifndef – DanChianucci 2013-02-17 04:07:35

+0

寫一個makefile? – 2013-02-17 04:07:38

+0

@ Trump211 yup! – as3rdaccount 2013-02-17 04:08:14

回答

7

不能定義在頭文件中的全局變量。您必須在.c文件的一個定義它們,然後用頭文件extern

在.c文件之一:

int cond; 

在.h文件之一,它必須包含在需要變量的所有.c文件中:

extern int cond;