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?
Aby się upewnić? Masz #ifndef CLASS1_H_/#define CLASS1_H_/#endif z twoim kodem pomiędzy? Potrzebujesz zdefiniować nie tylko #ifndef – DanChianucci
napisać plik Makefile? –
@ Trump211 tak! – as3rdaccount