mikrocontroller.net

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


Autor: Lisa Kunze (lisa)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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_ha...

Autor: Lisa Kunze (lisa)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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_ha...

Autor: Lisa Kunze (lisa)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lisa Kunze (lisa)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.