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?
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.
>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.
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.
@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.