Liste der Anhänge anzeigen (Anzahl: 1)
Problem mit der Mehrfacheinbindung von Bibliotheken
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:Anhang 27483
Danke schonmal für eure Hilfe.
Thorben
Liste der Anhänge anzeigen (Anzahl: 1)
Danke schon mal für deine Antwort.
Das mit "W5100_RSIZE" war nur ein Beispiel
Hier mein ganzer Output:Anhang 27484
Ich habe schon mal danach gesucht aber keine andere Definition gefunden.
Thobe
EDIT: Es sind ja alle Deklarationen in dem Header betroffen
Liste der Anhänge anzeigen (Anzahl: 1)
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