- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Problem mit der Mehrfacheinbindung von Bibliotheken

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108

    Problem mit der Mehrfacheinbindung von Bibliotheken

    Anzeige

    Praxistest und DIY Projekte
    Moin,

    ich versuche gerade die Arduino Ethernetbibliotheken in C umzuwandeln weil ich mir dadurch mehr Platz erhoffe.
    Jetzt habe ich das Problem, dass ich in der C datei Ethernet.c, EthernetServer.c, EthernetClient.c und socket.c die Headerdatei W5100.h einbinde und habe das Problem das der Compiler (AtmelStudio6) als Fehlermeldung ausgibt " multiple definition of `W5100_RSIZE' ". Ich denke das es daran liegt das ich die Headerdatei mehrmals einbinde.
    Wenn ich die Headerdatei nur an einer Stelle einbinde dann
    funktioniert es nicht und
    Code:
    #ifndef W5100_H_
    #defineW5100_H_
    ...Deklarationen...
    #endif
    hat auch noch nicht den gewünschent Zweck gehabt.
    Hier das Projekt:Ethernetwebserver.zip
    Danke schonmal für eure Hilfe.
    Thorben

  2. #2
    shedepe
    Gast
    Hast du schon einfach mal in der kompletten Solution nach W5100_RSIZE gesucht und geschaut , dass du es nicht doch doppelt definiert hast. Ansonsten sehen deine Include Guards korrekt aus.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Danke schon mal für deine Antwort.
    Das mit "W5100_RSIZE" war nur ein Beispiel
    Hier mein ganzer Output:Output.txt

    Ich habe schon mal danach gesucht aber keine andere Definition gefunden.

    Thobe

    EDIT: Es sind ja alle Deklarationen in dem Header betroffen
    Geändert von Thorben W (13.02.2014 um 16:26 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Thorben W
    und
    Code:
    #ifndef W5100_H_
    #defineW5100_H_
    ...Deklarationen...
    #endif
    hat auch noch nicht den gewünschent Zweck gehabt.
    Include-Guards verhindern das mehrfache Einbinden in ein und dieselbe Datei. Das hat mit deinem Problem nicht das geringste zu tun.


    Zitat Zitat von Thorben W
    Es sind ja alle Definitionen in dem Header betroffen
    Und genau dieses "Definitionen" ist hier das Problem. Die gehören nun mal nicht in einen C-Header. Da gehören nur Deklarationen rein.


    Zitat Zitat von Thorben W
    ich versuche gerade die Arduino Ethernetbibliotheken in C umzuwandeln
    Auch wenn das jetzt vielleicht etwas hart klingt, aber das eigentliche Problem scheint mir zu sein, dass du etwas versuchst, zu dem dir schlicht das nötige Grundlagenwissen fehlt.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Zitat Zitat von sternst Beitrag anzeigen
    Und genau dieses "Definitionen" ist hier das Problem. Die gehören nun mal nicht in einen C-Header. Da gehören nur Deklarationen rein.
    Entschuldigung ich bin auch nicht Perfekt habe mich falsch ausgedrückt. Um es klar zu stellen ich meinte die Deklarationen.

    Include-Guards verhindern das mehrfache Einbinden in ein und dieselbe Datei. Das hat mit deinem Problem nicht das geringste zu tun.
    Das heißt also, das die Datei von unterschiedlichen Dateien trotzdem mehrfach eingebunden wird?

    Thorben

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Thorben W
    Entschuldigung ich bin auch nicht Perfekt habe mich falsch ausgedrückt. Um es klar zu stellen ich meinte die Deklarationen.
    Es SIND aber Definitionen.


    Zitat Zitat von Thorben W
    Das heißt also, das die Datei von unterschiedlichen Dateien trotzdem mehrfach eingebunden wird?
    Natürlich, so muss das auch sein.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    So viel ich gesehen habe, liegt das Problem in w5100.h.
    Code:
    #define __GP_REGISTER8(name, address)             \
      inline void W5100_write##name(uint8_t _data) { \
        W5100_write(address, _data);                        \
      }                                               \
      inline uint8_t W5100_read##name() {            \
        return W5100_read(address);                         \
      }
      
    #define __GP_REGISTER16(name, address)            \
      void W5100_write##name(uint16_t _data) {       \
        W5100_write(address,   _data >> 8);                 \
        W5100_write(address+1, _data & 0xFF);               \
      }                                               \
      uint16_t W5100_read##name() {                  \
        uint16_t res = W5100_read(address);                 \
        res = (res << 8) + W5100_read(address + 1);         \
        return res;                                   \
      }
      
    #define __GP_REGISTER_N(name, address, size)      \
      extern uint16_t W5100_writeg##name(uint8_t *_buff) {   \
        return W5100_writeg(address, _buff, size);           \
      }                                               \
      extern uint16_t W5100_readg##name(uint8_t *_buff) {    \
        return W5100_readg(address, _buff, size);            \
      }
    Diese ganzen defines erstellen verschiedene Funktionen (namentlich). Bei jedem einbinden werden diese Funktionen neu erstellt, deshalb schreit der Compiler.
    Entweder defines rausschmeißen und sauber ausprogrammieren oder die Implementierung in die .c verlagern und in der .h nur die Prototypen erstellen.

    Waren auch noch ein paar andere Fehler drin. Das kompiliert zumindest.



    mfg
    Angehängte Dateien Angehängte Dateien
    Geändert von Wsk8 (14.02.2014 um 23:23 Uhr)

Ähnliche Themen

  1. Eagle Problem mit Eagle-Bibliotheken
    Von Crowley im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 9
    Letzter Beitrag: 06.10.2015, 15:59
  2. Problem mit der Programmierung von Asuro
    Von jojobau im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 13.05.2009, 22:27
  3. Problem mit der Programmierung von Asuro
    Von jojobau im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 13.05.2009, 21:00
  4. Problem beim Erstellen von Bibliotheken/Models
    Von hzockt im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 0
    Letzter Beitrag: 13.07.2007, 20:25
  5. Problem mit der Inbetriebnahme von Robby RP5 + CC2
    Von Fallobst im Forum Robby CCRP5
    Antworten: 6
    Letzter Beitrag: 24.07.2006, 15:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad