Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung: "undefined reference to"


von Lisa K. (lisa)


Lesenswert?

Habe das STK525 mit At90USB, benutze Atmel's Beispielanwendung template 
und möchte den Poti-Wert einlesen, hänge aber seit Tagen an diesem 
Problem fest:
"
device_template_task.o: In function `device_template_task':
../device_template_task.c:91: undefined reference to `Get_adc_pot_val'
make: *** [template.elf] Error 1
Build failed with 1 errors and 1 warnings...
"
USE_ADC habe ich "#defined", .h und .c Datei mit eingebunden, die die 
Funktion beschreiben.
Dieser Fehler tritt recht häufig auf, habe auch viele Beiträge gefunden 
und befolgt, aber es hat noch nichts richtig weiter geholfen.
Zuletzt habe ich die .c Datei ins Makefile eingefügt bei:
## Objects that must be built in order to link       und
## Compile
half aber nix.

Weiß jemand Rat?
Nutze AVRStudio mit AVRGCC von WinAVR!

MfG Lisa

von Karl H. (kbuchegg)


Lesenswert?

> undefined reference to `Get_adc_pot_val'

Das heist nichts anderes, als keine Funktion mit dem
Namen Get_adc_pot_val gefunden werden konnte.

Das kann mehrere Ursachen haben
* Ein simpler Tippfehler. Häufig ist es einfach nur die
  Gross/Kleinschreibung die einen einen Strich durch die
  Rechnung macht
* Beim Linken wurden nicht alle Bestandteile, die das fertige
  Programm ausmachen, angegeben.
  Jedes *.c File wird einzeln compiliert um daraus eine sog.
  Objectdatei zu machen.
  Die Summe aller Objectdateien, die zu dem Projekt gehören,
  werden dann zum eigentlichen Programm zusammen-gelinkt
  (miteinander verbunden).
  Ist dort eine Objectdatei nicht angegeben, so fehlen natürlich
  die dort enthaltenen Funktionen, der Linker kann sie nicht finden
  und meldet 'undefined reference'

> Nutze AVRStudio mit AVRGCC von WinAVR!
Wenn du AVR Studio benutzt, dann brauchst du dich ums Makefile
nicht selbst kümmern, du kannst das alles über das AVR Studio
erledigen

http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F

von Lisa K. (lisa)


Lesenswert?

Fehler gefunden!
Hab das falsche Source-/Header- File benutzt.
Hat aber erst funktioniert, nachdem ich wieder alles zum Makefile 
hinzugefügt habe!????
Wenn ich die Objekt-Datei wieder rausnehm aus
## Objects that must be built in order to link
geht's nicht.

Oder muss bevor "Build" ausgeführt wird noch eine andere Funktion 
aufrufen, die das Mekefile neu generiert?

von Karl H. (kbuchegg)


Lesenswert?

Lisa Kunze wrote:
> Fehler gefunden!
> Hab das falsche Source-/Header- File benutzt.
> Hat aber erst funktioniert, nachdem ich wieder alles zum Makefile
> hinzugefügt habe!????
> Wenn ich die Objekt-Datei wieder rausnehm aus
> ## Objects that must be built in order to link
> geht's nicht.
>
> Oder muss bevor "Build" ausgeführt wird noch eine andere Funktion
> aufrufen, die das Mekefile neu generiert?

Nein. Überlass das Makefile dem AVR-Studio.
Du musst lediglich das besagte File ins Projekt einfügen:

http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F

von Lisa K. (lisa)


Lesenswert?

..den Link hab' ich mir schon angeschaut! Da steht ja auch, dass die .o 
gelinkt werden.
Aber wenn's doch so nicht funktioniert!

Einstellungen zum Makefile gibt's bei AVRStudio nich, oder?

von Karl H. (kbuchegg)


Lesenswert?

Lisa Kunze wrote:
> ..den Link hab' ich mir schon angeschaut! Da steht ja auch, dass die .o
> gelinkt werden.
> Aber wenn's doch so nicht funktioniert!

Hast du auch ganz unten den Abschnitt gesehen, wie man dem
AVR-Studio klar macht, welche Dateien zum Projekt gehören?
Das ist das um und auf: Im AVR-Studio alle Source Code Files
eintragen und alles wird compiliert und vollständig gelinkt.

> Einstellungen zum Makefile gibt's bei AVRStudio nich, oder?
Durch Hinzufügen von Source Code Files zum Projekt veränderst
du implizit das Makefile. Die anderen Dinge die im Makefile
eingestellt werden sind in den Projekt-Optionen enthalten.

Mit AVR-Studio gibt es keinen Grund sich selbst mit dem
Makefile herumzuschlagen.

von Lisa K. (lisa)


Lesenswert?

Wenn mit aktivieren des Knoten "Source File" das markieren gemeint ist, 
hab' ich's so gemacht, werd noch ein bißchen rumprobieren woran es denn 
liegt.

Wenn ich ein Source File compiliere gibt es auch schon eine Message:
"gcc plug-in: Making arbitrary targets when using external makefile may 
fail"

von Karl H. (kbuchegg)


Lesenswert?

Lisa Kunze wrote:
> Wenn mit aktivieren des Knoten "Source File" das markieren gemeint ist,
> hab' ich's so gemacht, werd noch ein bißchen rumprobieren woran es denn
> liegt.
>
> Wenn ich ein Source File compiliere gibt es auch schon eine Message:
> "gcc plug-in: Making arbitrary targets when using external makefile may
> fail"


Nochmal: Schalte das externe Makefile endlich ab!
AVR-Studio kümmert sich um dein Makefile.
Das macht das zwar nicht perfekt, aber gut genug.

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
Noch kein Account? Hier anmelden.