Autor Thema: Multiple Definitions trotz ifndef  (Gelesen 7329 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 20. July 2011, 20:29 »
Hallo zusammen,

ich habe ein Problem mit dem Linker (ld).
Ich habe mir eine Header-Datei (1) erstellt, die inline-Funktionen definiert, die in eine andere Header-Datei inkludiert wird (2).
Die Kompilierung funktioniert einfach frei.
Sobald der Linker die Object-Files bekommt, meldet er, dass Header-Dateien, die (2) inkludieren, die Funktionen aus (1) redefinieren.
Das dürfte nicht passieren, da ich (1) mit ifndef kapsel.

Was kann der Linker noch falsch machen?

Grüße,
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. July 2011, 20:53 »
Mach die Inline-Funktion static.
Dieser Text wird unter jedem Beitrag angezeigt.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 20. July 2011, 20:57 »
Hab ich. Hat nichts gebracht.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 20. July 2011, 21:16 »
Löst deine Makefile die Abhängigkeiten korrekt auf? Oder hast du make clean nach der Änderung ausgeführt?

Wenn das nicht zur Lösung führt, zeig bitte den Code und die Fehlermeldung. Ansonsten rate ich weiter.
Dieser Text wird unter jedem Beitrag angezeigt.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 20. July 2011, 21:19 »
Danke.
Das Problem lag am Makefile...
Ich dachte, dass er die Header-Files beachtet.

Danke.

Wird das nicht durch den depend-Befehl gemacht?
Dachte immer, dass depend auch die Header-Abhängigkeiten beachtet.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 20. July 2011, 21:29 »
Den depend-Befehl kenn ich nicht.

Ich mach das mit den Abhängigkeiten immer so: Ich setze in den CPPFLAGS noch den Parameter -MMD. Dann erzeugt der GCC neben jeder .o-Datei noch eine .d-Datei mit den Abhängigkeiten. Diese Dateien binde ich dann noch in etwa so in meine Makefile ein.

DEPS = $(OBJS:.o=.d)

-include $(DEPS)

$(OBJS) ist die Variable, die die Namen der Objekt-Dateien enthält. Das - vor dem include verhindert, dass make Fehlermeldungen ausgibt, wenn die .d-Dateien noch nicht existieren (z.B. beim Kompilieren nach einem make clean.)

Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen