Hallo, ich habe im AVR Studio 5 ein bestehendes µC Projekt geöffnet und möchte dieses erweitern. Dazu habe ich eine neue .cpp Datei mit neuen Funktionen angelegt, welche ich in der main aufrufe. Die Prototypen aller Funktionen habe ich in einem neuen header deklariert, welchen ich in der Main angebe. Nun kommt immer diese Fehlermeldung: undefined reference to Woran kann es liegen?
>Woran kann es liegen?
Was an: "undefined reference to" verstehst Du nicht?
google hat mir eigentlich nicht sehr geholfen Diese Fehlermeldung kommt doch eigentlich, wenn ich keinen prototypen der funktion habe, aber der ist vorhanden und die header ist eingebunden. Ich versteh nicht was ich falsch gemacht haben soll.
Nein, diese Fehlermeldung kommt, wenn Du das nötige File nicht dazu linkst. Grüße, René
>Diese Fehlermeldung kommt doch eigentlich, wenn ich keinen prototypen >der funktion habe, aber der ist vorhanden und die header ist >eingebunden. Die Fehlermeldung kommt in auch, wenn es keine "Definition" der Funktion gibt. Der Linker findet also keine Code-Adresse die er verwenden kann. Das ist der primäre Grund. Ob das nun an einer fehlenden Objekt-Datei oder der fehlenden Angabe im Linker-Aufruf liegt wissen wir nicht.
Ein fehlender Prototyp spielt dabei eine untergeordnete Rolle. Da hätte nämlich schon der Compiler gewarnt.
Rene H. schrieb: > Nein, diese Fehlermeldung kommt, wenn Du das nötige File nicht dazu > linkst. Wie linke ich diesen richtig?
qwertz schrieb: > google hat mir eigentlich nicht sehr geholfen > > Diese Fehlermeldung kommt doch eigentlich, wenn ich keinen prototypen > der funktion habe, aber der ist vorhanden und die header ist > eingebunden. Das reicht aber nicht. Das befriedigt nur den Compiler, wenn er das C-File compiliert, welches die Funktionen verwenden will. Aber * das C-File mit den eigentlichen Funktionen muss ja ebenfalls compiliert werden * der Linker muss wissen, dass er dieses bereits compilierte File mit den Funktionen dann auch zum kompletten Programm mit dazunehmen muss. > Ich versteh nicht was ich falsch gemacht haben soll. Du hast das C-File nicht mit zu den zu diesem Projekt gehörenden Source Code Files in der Projektverwaltung mit aufgenommen. Daher sorgt die Projektverwaltung nicht dafür, dass dieses C-File auch compiliert wird. Daher wird dann das Ergebnis davon nicht mit ins fertige Programm aufgenommen. Folge: Der Linker versucht das Programm vollständig zu machen, kann es aber nicht, weil der die Implementierungen der Funktionen nicht findet. Als Folge davon teilt er dir dies mit - in Form einer Fehlermeldung 'undefined reference'. Im restlichen Programm ist eine Referenz auf Funktionen enthalten 'Ich würde gerne xyz aufrufen', aber die Funktionen selbst existieren nicht (sind 'undefined'). D.h. sie sind ja nicht wirklich 'nicht existent'. Nur weiß kein Schwein ausser dir, dass dieses C-File ebenfalls mit zum Projekt gehört. Du kannst auf deinem Verzeichnis 300 Millionen C-Files rumliegen haben; deswegen werden die noch lange nicht automatisch compiliert und mit dazugelinkt. Du musst schon deiner Projektverwaltung mitteilen: "Das gehört mit dazu und das ebenfalls" - die restlichen 299999998 C-Files werden dann einfach ignoriert, weil sie ja nicht zum Projekt gehören. Nimm das C-File mit in die Projektverwaltung auf und alles ist gut - solange du keine Syntaxfehler in den Funktionen hast und alles sauber compiliert, natürlich.
Und diese Informationen findest Du mit dem Stichwort "undefined reference" nicht bei Google? Hmm. Welches Google verwendest Du?
@Karl Heinz Buchegger: erstmal 1000 Dank für die Hilfe !! > Nimm das C-File mit in die Projektverwaltung auf und alles ist gut Wie mache ich das im AVR Studio 5 ?
qwertz schrieb: > @Karl Heinz Buchegger: erstmal 1000 Dank für die Hilfe !! > >> Nimm das C-File mit in die Projektverwaltung auf und alles ist gut > > Wie mache ich das im AVR Studio 5 ? Indem du zb in dem Teil vom Studio, in dem alle zum Projekt gehörenden Dateien aufgelistet sind, einfach mal auf die rechte Maustaste drückst und dir ansiehst, welche Menüpunkte dir das Studio so anbietet.
Hallöchen, ja der Beitrag ist alt aber habe das selbe Problem. Wie auf dem Bild zu erkennen werden die Definitionen nicht erkannt obwohl ich die .c-Dateien im Solution Explorer habe und diese in der Regel auch mit compiliert werden. Genauer gesagt versuche ich mein komplettes Projekt zu umzugestalten das es der C-Konform entspricht und ansehnlicher wird. Vorher hatte ich alles (auch Funktionsdefinitionen) in .h-Dateien gepackt. Das lief auch alles super nur seitdem ich es alles versuche richtig zu machen klappt nichts mehr. und momentan komme ich nicht darauf warum der die definitionen nicht findet obwohl sie alle da sind??? habt ihr eine Idee woran es liegt das der Compiler, obwohl alles vorhanden ist, nichts findet? Danke im voraus! P.S. Bitte nicht fertig machen weil alles etwas wirr aussieht, bin ja wie gesagt gerade dabei alles schön zu machen um es dann in zukunft alles gleich so zu schreiben :D
Du hast anscheinend ein C++-Projekt statt einem C-Projekt erstellt. Also: - Projektdatei löschen - Schaltfaktor.cpp in schaltfaktor.c umbenennen - Neues C-Projekt erstellen - Alle c- und h-Dateien einfügen (Add Existing File to Projekt)
OK Habs ausprobiert.... kompiliert.... keine fehler..... ich verneige mich vor Dir.... 3 std. gesucht und nichts gefunden, aus Angst wieder als Troll bezeichnet zu werden gekniffen zu fragen. Und nun? DANKE!!!!! DANKE!!!! DANKE!!!!!!
Das geht auch in einem C++ Projekt, dazu musst du aber die in C Compilierten Teile anders deklarierern (im headerfile des C-Codes folgendes einfügen ...).
1 | #ifdef __cplusplus
|
2 | extern "C" { |
3 | #endif
|
4 | |
5 | /*Hier kommen die Funktionsdeklarationen*/
|
6 | |
7 | #ifdef __cplusplus
|
8 | }
|
9 | #endif
|
Vielleicht kann es jmd. einmal brauchen. Hintergrund ist das andere name mangling von C++ im Vergleich zu C.
:
Bearbeitet durch User
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.