Forum: Compiler & IDEs multiple definition of '...'


von felix (Gast)


Lesenswert?

Hi ich mache meine ersten C Schritte und brauche eure Hilfe.

Ich habe Probleme, mein C Programm bestehend aus 2 Sourcefiles und 3 
Headerfiles zu linken. Compiliert wird alles und es werden die beiden 
Objektdateien erstellt aber das elf file nicht! Die Fehlermeldung im 
A-Studio Buildwindow ist:

Build started 7.11.2006 at 22:39:09
avr-gcc.exe  -mmcu=atmega16 -Wall -gdwarf-2  -O0 -fsigned-char -MD -MP 
-MT Machine.o -MF dep/Machine.o.d  -c  ../Machine.c
avr-gcc.exe -mmcu=atmega16 -minit-stack=0x400 Machine.o SD_Card.o     -o 
Machine.elf
SD_Card.o: In function `init_sd_card':
../SD_Card.c:42: multiple definition of `sd_wpointer'
Machine.o:../Machine.c:113: first defined here
SD_Card.o: In function `init_sd_card':
../SD_Card.c:42: multiple definition of `sd_rpointer'
Machine.o:../Machine.c:113: first defined here
SD_Card.o: In function `init_sd_card':
../SD_Card.c:42: multiple definition of `argument'
Machine.o:../Machine.c:113: first defined here
make: *** [Machine.elf] Error 1
Build succeeded with 0 Warnings...

Das passiert, weil ich mehrfach das Headerfile mit den jeweiligen 
Definitionen einbinde. Allerdings steht bei jedem Headerfile oben:

#ifndef sd_card_h
#define sd_card_h

....

und unten

#endif  //sd_card_h

Es sollte doch damit nur einmal eingebunden werden. Man macht das doch 
eingentlich so. Oder mache ich prinzipiell was falsch? Vielen Dank für 
sachdienliche Hinweise

Grüsse
Felix

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Oder mache ich prinzipiell was falsch?

Ja: in ein Headerfile gehören nur Deklarationen, keine Definitionen.

Also in sd_card.h steht:

extern uint16_t sd_rpointer, sd_wpointer;

...und in einer der C-Dateien steht dann:

uint16_t sd_rpointer, sd_wpointer;

von felix (Gast)


Lesenswert?

Super - Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.