2013-02-17 67 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;