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?
du musst die Serial.cpp AUCH compilieren und das Ergebnis (Serial.o oder so) beim Linken mit verwenden.
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?!?
Nein, die eine "geht" nicht. Dein Linker bricht halt anscheinend nach dem ersten Fehler ab und zeigt den nächsten nicht mehr.
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 ...
Zeig einfach mal den kompletten Code. Alles andere ist Kaffeesatzleserei.
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?
Andreas Schweigstill schrieb: > Oder handelt es sich gar um ein Projekt, bei dem C- und C++-Quellen > gemischt werden? stichwort:
1 | #ifdef __cplusplus
|
2 | extern "C"{ |
3 | #endif
|
4 | |
5 | |
6 | |
7 | #ifdef __cplusplus
|
8 | }
|
9 | #endif
|
Ein anderer Fehler, der beschriebene Symptome auslösen kann, sind kopierte (und damit eventuell bereits definierte) include guards.
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...
AnoNim schrieb: > Leider > bin ich mit der Sache der Linker usw. nicht vertraut genug um > qualifizierte Aussagen zu machen, geschweige denn das Problem zu > beseitigen... wie wärs, wenn man dann dieses Wissen mal nachholt undnicht darauf wartet, dass einen andere alles vorkauen? http://c-links.blogspot.de/2008/09/difference-between-preprocessor.html (wobei hier die bilder besser sind als der Text, der ein paar Fehler enthält) oder http://www.cs.washington.edu/education/courses/cse378/97au/help/compilation.html Ansonsten gilt weiterhin: Hmm schrieb: > Zeig einfach mal den kompletten Code. > Alles andere ist Kaffeesatzleserei.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.