mikrocontroller.net

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


Autor: felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super - Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.