Hi Leutz,
ich hab nen Problem, das ich einfach nicht wegekomme.
1.Datei: SPI.cpp
Hier will ich eine Funktion SerialPutChar aufrufen, die in der 2. Datei
vorhanden ist.
Vorhandene includes: #include Serial.h
2.Datei: Serial.cpp
Hier ist die Funktion SerialPutChar integriert.
Vorhandene includes: #include Serial.h
3. Datei Serial.h
Hier ist der Funktionsprototyp von SerielPutChar drin.
Vorhandene includes: keine
Meiner Meinung nach doch alles richtig drin. Jedoch bekomme ich beim
Aufruf der Funktion in der 1.Datei die Fehlermeldung "undefined
reference to SerialPutChar". Wenn ich in der 1.Datei noch "Serial.cpp"
includiere, bekomm ich natürlich als Fehler: "multiple definitions of
'SerialPutChar(char)' ", muss ja auch, weil ich dann ja im Kreis
einbinde.
Hab ich grad Tomaten vor den Augen, oder gibt's da einen Trick?
Achso, dummerweise vergessen zu sagen: Ich Arbeite in AVR-Studio, der
kompiliert eigentlich schon direkt alle Dateien. (Falls das nen
Unterschied macht: Ist C++)
Offensichtlich nicht. Also füge alle .cpp-Dateien dem Projekt hinzu,
stelle sicher, daß keine irgendwie ausgeschlossen sind, und dann wirds
schon gehen.
Außer natürlich, du hast vorher schon Fehler, und die Serial.cpp
kompiliert gar nicht fehlerfrei.
Problem umgangen, taucht jetzt bei ner neuen Datei auf...
Jedoch will ich jetzt in der 1. Datei 2 Funktionen aus der 2. Datei
aufrufen, eine geht, bei der anderen kommt wieder "undefined reference
to xxx".
Wtf?!?
Toll Meister. Du hast das Problem umgangen und schon linst es an einer
anderen Stelle im die Ecke. Aber das macht nichts. Du hast es ja
umgangen.
Jetzt sollen wir Dir nur noch helfen das andere Problem zu umgehen.
Das erst entstanden ist als Du das erste umgangen hast.
Was ist eigentlich los mit Dir? Lies die Antworten und mach was daraus
und nicht aus irgendwelchen abstrusen Deiner Phantasieen wie denn so ein
Mikrocontroller und ein Compiler und Linker tatsächlich funktionieren.
Ja, ja ich weiss. Jetzt kommt gleich die Arie: Ich bin nur ein dummer
Anfänger und man wird doch noch mal fragen dürfen.
Sicher! Darfst Du. Aber darfst auch selber denken.
1. Nein, mein Umgehen hat absolut nichts mit dem neuen Problem zu tun
bzw. hat dieses nicht erzeugt.
2. Habe ich die Antworten gelesen und alle möglichen Einstellungen
durchsucht, alle Dateien und Einstellungen stehen auf kompilieren, es
werden laut Statusmeldung auch alle Daten mit einbezogen.
3. Die 2. Funktion, bei der der Fehler ausgelöst wird, steht in der
main-Funktion an zweiter Stelle, nach der ersten die zu funktionieren
scheint, in der Headerdatei und in der .cpp jedoch über der anderen
Funktion. Daraus würde ich schließen, dass eben nicht der eine Fehler
das Debugging abbricht, denn sonst würde ja bereits die 1. Funktion
einen Fehler ausgeben.
4. Nein, ich bin kein Anfänger. Zumindest würde ich mich selbst nicht
als blutigen Anfänger bezeichnen. Jedoch hab ich so ein Problem bisher
nicht gehabt. Zumindest keins, das nicht über richtige includes gelöst
werden konnte.
5. Ich denke dass ich ein paar Probleme dafür indentifizieren konnte: Es
sind noch einige Präprozessordirektive in der Datei vorhanden, die ich
nicht erwartet hatte (habe die Datei nicht komplett selbst geschrieben
(nein, ich schreibe mir keine eigene FAT-System-Bib)).
Denke damit hat sich das soweit auch schon.
Danke für die Kommentare.
begebe dich auf die Konsole .. so schwer ist es nicht
einmal manuell g++ mit Parametern ausprobieren und in Makefile
hinterlegen
die "Umgebung" verschleiert einige Details ...
AnoNim schrieb:> 3. Die 2. Funktion, bei der der Fehler ausgelöst wird, steht in der> main-Funktion an zweiter Stelle, nach der ersten die zu funktionieren> scheint, in der Headerdatei und in der .cpp jedoch über der anderen> Funktion. Daraus würde ich schließen, dass eben nicht der eine Fehler> das Debugging abbricht, denn sonst würde ja bereits die 1. Funktion> einen Fehler ausgeben.
Das ist ein Fehlschluß.
Im übrigen scheinst du nicht nur den Unterschied zwischen Kompilieren
und Linken nicht zu kennen (und der ist hier fundamental), sondern
wirfst nun auch noch Debugging mit in denselben Topf.
> 4. Nein, ich bin kein Anfänger. Zumindest würde ich mich selbst nicht> als blutigen Anfänger bezeichnen. Jedoch hab ich so ein Problem bisher> nicht gehabt. Zumindest keins, das nicht über richtige includes gelöst> werden konnte.
Includes lösen nur keine Fehler mit undefined references.
> 5. Ich denke dass ich ein paar Probleme dafür indentifizieren konnte: Es> sind noch einige Präprozessordirektive in der Datei vorhanden, die ich> nicht erwartet hatte (habe die Datei nicht komplett selbst geschrieben> (nein, ich schreibe mir keine eigene FAT-System-Bib)).
Albern hoch drei.
> Denke damit hat sich das soweit auch schon.
Ich bin jedenfalls raus. Du bist nicht nur lernresistent, sondern auch
noch stolz drauf. Viel Spaß mit deinem Programm.
AnoNim schrieb:> 1.Datei: SPI.cpp> Hier will ich eine Funktion SerialPutChar aufrufen, die in der 2. Datei> vorhanden ist.> Vorhandene includes: #include Serial.h>> 2.Datei: Serial.cpp> Hier ist die Funktion SerialPutChar integriert.> Vorhandene includes: #include Serial.h>> 3. Datei Serial.h> Hier ist der Funktionsprototyp von SerielPutChar drin.> Vorhandene includes: keine
Es genügt nicht, einen nur ähnlich geschriebenen Funktionsprototyp zu
definieren, sondern es sollte sich schon um exakt die gleiche
Schreibweise handeln.
Erstellt Du dieses Programm nun in C oder C++? Ist Dir klar, welche
Unterschiede es zwischen den Sprachen gibt und welchen Einfluss die
gewählte Sprache nicht nur auf das Kompilieren, sondern vor allem auch
auf das Linken hat?
Falls Du behaupten solltest, Dir wäre der Unterschied klar, bitte ich
Dich, die Unterschiede beim Linken kurz aufzuführen.
Oder handelt es sich gar um ein Projekt, bei dem C- und C++-Quellen
gemischt werden?
Stimmen denn die Compiler-Einstellungen mit der jeweils gewünschten
Sprache überein?
Ja, es ist in C++ geschrieben und integriert externe c Dateien. Leider
bin ich mit der Sache der Linker usw. nicht vertraut genug um
qualifizierte Aussagen zu machen, geschweige denn das Problem zu
beseitigen...