2013-02-17 10 views
5

Więc mam źródło mainClass.c, gdzie mam zdefiniowaną główną. Mam plik nagłówkowy class1.h oraz implementację wszystkich funkcji zdefiniowanych w klasie1.h w klasie1.c. Mam dwie zmienne (globalne) w klasie1.h o nazwie cond i mutex, które są obecnie używane w klasie1.c i prawdopodobnie w przyszłości również będę je używał w moim mainClass.c. Teraz skompilować wszystkie pliki źródłowe, aby wygenerować jeden plik obiektowy robię coś w następujący sposób:Jak skompilować wiele plików .c i .h w gcc linux?

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

/home/2008/ariarad/mainClass1 gdzie wszystkie moje pliki nagłówkowe i źródłowe są i jestem za pomocą pliku pthead.h w jednym z plików .c. Mimo że uwzględniłem to, narzeka, więc musiałem to uwzględnić.

Teraz gdy uruchamiam powyższej komendy otrzymuję następujące błędy:

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 

wszelki wypadek mam IFNDEF i endif blok otaczający class1.h aby uniknąć wielokrotnego włączania. Zdecydowanie nie redefiniuję zmiennych zdefiniowanych w pliku nagłówkowym w pliku .c. Czy ktoś może mi pomóc, dlaczego wciąż daje mi błędy?

+0

Aby się upewnić? Masz #ifndef CLASS1_H_/#define CLASS1_H_/#endif z twoim kodem pomiędzy? Potrzebujesz zdefiniować nie tylko #ifndef – DanChianucci

+0

napisać plik Makefile? –

+0

@ Trump211 tak! – as3rdaccount

Odpowiedz

7

Nie można definiować zmiennych globalnych w plikach nagłówkowych. należy je zdefiniować w jednym z plików .c, a następnie użyj extern w plikach nagłówka:

W jednym z .c pliki:

int cond; 

W jednym z .h plików, które muszą być dołączone do wszystkich plików .c, które wymagają zmiennej:

extern int cond; 
Powiązane problemy