www.mikrocontroller.net

Forum: Compiler & IDEs undefined reference to `__eeprom_write_byte_1C1D1E


Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle

Bei meinem aktuellen Projekt bekomm ich immer eine Fehlermeldung beim
Linken:

Linking: belichtungstimer.elf
avr-gcc -mmcu=attiny26 -I. -gstabs -DF_CPU=8000000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=belichtungstimer.o
-If:/Programme/AVRlib -std=gnu99 -MD -MP -MF
.dep/belichtungstimer.elf.d belichtungstimer.o --output
belichtungstimer.elf -Wl,-Map=belichtungstimer.map,--cref    -lm
belichtungstimer.o(.text+0xba): In function `eeprom_read':
C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/include/avr/eeprom.h: 
192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0xc6):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../ 
../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0xd2):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../ 
../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0xde):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../ 
../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0xec): In function `eeprom_write':
C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/include/avr/eeprom.h: 
192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0xfe):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../ 
../../avr/include/avr/eeprom.h:286:
undefined reference to `__eeprom_write_byte_1C1D1E'
belichtungstimer.o(.text+0x104):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0x116):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:286:
undefined reference to `__eeprom_write_byte_1C1D1E'
belichtungstimer.o(.text+0x11c):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0x12e):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:286:
undefined reference to `__eeprom_write_byte_1C1D1E'
belichtungstimer.o(.text+0x134):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:192:
undefined reference to `__eeprom_read_byte_1C1D1E'
belichtungstimer.o(.text+0x146):C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../.. 
/../../avr/include/avr/eeprom.h:286:
undefined reference to `__eeprom_write_byte_1C1D1E'
make.exe: *** [belichtungstimer.elf] Error 1

Was ist denn da los??

Ich hoffe es kann mir wer helfen.

Danke im Voraus

Gruß Robert

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn deine Bibliothek diese Routine nicht hat, ist bei dir
irgendwas bei der Installation kaputt.

Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der Installation von WinAvr oder der avrlibc?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr-libc.  Wenn du WinAVR hast, hast du denn die avr-libc separat
implementiert?

Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die header Dateien durch die der avrlibc 1.4.4 ersetzt.

Wie soll ich das sonst machen?

Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert nun DANKE

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hab die header Dateien durch die der avrlibc 1.4.4 ersetzt.

Die ganze Bibliothek installieren.  Es hat keinen Sinn, Headers
zu installieren zu etwas, was man dann nicht als Bibliothek hat.

(Hast du ja wohl inzwischen selbst gemerkt, die Anmerkung ist nur,
falls jemand in der Suche drauf stößt.)

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe genau das gleiche Problem wie Florian, auch bei mir kommt:

c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined 
reference to `__eeprom_read_byte_1F2021'

Nur ist meine gesamte WinAVR-Installation komplett neu (Release aus dem 
Dezember letzten Jahres).

Für Hinweise wäre ich dankbar.

Christoph

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen neuen Thread aufmachen wäre sinnvoller gewesen.

Bitte ergänze mal die Optionen für den C-Compiler (insbesondere beim
Linken) im Makefile mit -v und kopiere hier die Zeile rein, mit der
der avr-gcc den Linker (avr-ld) aufruft.

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir leid, Jörg, aber ich weiß nicht wirklich, wo ich die Sachen 
eintragen soll. Im Anhang ist das Makefile. Ich verwende die 
Bootloader-Software von Peter Fleury und würde sie gerne etwas 
modifizieren, daher der Bedarf an den EEPROM-Funktionen.

Vielen Dank schonmal.

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine weiteren Hilfen? Es ist nicht so, dass ich andere für mich 
arbeiten lasse möchte und einfach das Makefile zum Ändern hier 
reinstelle, nur ohne etwas genauere Angaben habe ich keine Ahnung, wo 
ich was ändern soll bzw. was ich noch an Infos posten soll. Diverses 
Herumprobieren half bislang jedenfalls leider nicht weiter.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph Budelmann wrote:

> Keine weiteren Hilfen?

He, das ist kein Dienstleistungsunternehmen...  Musst schon erstmal
warten, bis ich auch wieder vor einem Computer sitze und Zeit dafür
habe.

Du kannst das irgendwo bei den CFLAGS mit reinschreiben, im Prinzip
genügen hier sogar die LDFLAGS.  Die Ausgabe von make kannst du mit
Standard-EA-Umleitungen in eine Textdatei lenken:
make > logfile.txt 2>&1

Daraus solltest du das dann entweder zurechtgestutzt als Anhang posten
können oder einfach in den Text kopieren.  Mich interessiert wie
gesagt die Stelle, an der der Compiler den Linker aufruft (der heißt
"ld" und wird über irgendeinen verqueren Pfad-Aufruf gestartet).

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> He, das ist kein Dienstleistungsunternehmen...

Das weiß ich auch, ich bin ja sowieso schon sehr dankbar, dass sich 
überhaupt jemand meinem Problem annimmt.

> Du kannst das irgendwo bei den CFLAGS mit reinschreiben, im Prinzip
> genügen hier sogar die LDFLAGS.

Habe ich gemacht.

> Die Ausgabe von make kannst du mit
> Standard-EA-Umleitungen in eine Textdatei lenken:
>
>
make > logfile.txt 2>&1

Leider weiß ich weder, noch finde ich etwas mir hilfreiches zu deinem 
Vorschlag. Könntest du das für jemanden, der sonst nie etwas mit der 
Materie zu tun hat, genauer erklären?

> Daraus solltest du das dann entweder zurechtgestutzt als Anhang posten
> können oder einfach in den Text kopieren.  Mich interessiert wie
> gesagt die Stelle, an der der Compiler den Linker aufruft (der heißt
> "ld" und wird über irgendeinen verqueren Pfad-Aufruf gestartet).

Momentan bekomme ich noch folgende Fehlermeldung, aber das ist nicht, 
was du haben willst, denke ich.

Compiling: stk500boot.c
avr-gcc -c -mmcu=atmega168 -I. -v,-gdwarf-2 -DF_CPU=16000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums 
-mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.lst 
-std=gnu99 -MD -MP -MF .dep/stk500boot.o.d stk500boot.c -o stk500boot.o
avr-gcc: unrecognized option '-v,-gdwarf-2'

Linking: stk500boot.elf
avr-gcc -mmcu=atmega168 -I. -v,-gdwarf-2 -DF_CPU=16000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums 
-mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.o 
-std=gnu99 -MD -MP -MF .dep/stk500boot.elf.d stk500boot.o --output 
stk500boot.elf -v,-Wl,-Map=stk500boot.map,--cref    -lm 
-Wl,--section-start=.text=3800 -nostartfiles -nodefaultlibs
stk500boot.o: In function `main':
stk500boot.c:(.text+0x50): undefined reference to 
`__eeprom_read_word_1F2021'
stk500boot.c:(.text+0x60): undefined reference to 
`__eeprom_read_word_1F2021'
stk500boot.c:(.text+0xae): undefined reference to 
`__eeprom_write_word_1F2021'
stk500boot.c:(.text+0xb8): undefined reference to 
`__eeprom_write_word_1F2021'
avr-gcc: unrecognized option '-v,-gdwarf-2'
avr-gcc: unrecognized option '-v,-Wl,-Map=stk500boot.map,--cref'
make.exe: *** [stk500boot.elf] Error 1

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst das da oben einfach auf der Kommandozeile einer Shell eingeben
(cmd.exe).  Das ist das, was manche Leute ,,MS-DOS'' nennen, auch wenn
es seit Windows NT mit MS-DOS auch nicht das Geringste mehr gemein hat.

Aber du bist schon knapp dran.  Schreib nur statt "-v,-gdwarf-2" in
das Makefile "-v -gdwarf-2".  Das sind zwei verschiedene Optionen, die
nur beide dem Compiler mitgegeben werden sollen.

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also:

Ohne das Komma bekomme ich immer noch die Fehlermeldung mit dem 
undefined reference.

Gebe ich

make c:\bootloader\stk500boot

in die Kommandozeile ein, bekomme ich eine Fehlermeldung, die mit 
"16-Bit-MS-DOS-Teilsystem" überschrieben ist und mir erzählt, dass die 
NTVDM-CPU einen ungültigen Befehl entdeckt hat. Es folgen einige wirre 
hex-Codes.

Erzeuge ich danach das Logfile, steht darin

&make: *** No targets specified and no makefile found.  Stop.

Ich hoffe, du kannst damit etwas anfangen, ich leider nicht. ;-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph Budelmann wrote:

> Ohne das Komma bekomme ich immer noch die Fehlermeldung mit dem
> undefined reference.

Das hatte ich erwartet. ;-)

Ich möchte ja auch nur die Kommandozeile sehen, mit der der Linker
aufgerufen wird.

> &make: *** No targets specified and no makefile found.  Stop.

Du musst dich schon in dem Verzeichnis befinden, in dem dein Makefile
(und der Rest deines Projektes) sind...  Woher soll das make denn
sonst wissen, ob du gerade Projekt A oder Projekt B bauen willst?

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
>> &make: *** No targets specified and no makefile found.  Stop.
>
> Du musst dich schon in dem Verzeichnis befinden, in dem dein Makefile
> (und der Rest deines Projektes) sind...  Woher soll das make denn
> sonst wissen, ob du gerade Projekt A oder Projekt B bauen willst?

Ich dachte, das wäre in

make c:\bootloader\stk500boot

enthalten (Das Verzeichnis ist natürlich das richtige.).

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, höchstens, indem du

make -C c:\bootloader\stk500boot

sagst.  Das -C heißt "chdir to ...".

Ansonsten hast du dem make gesagt, dass es die Datei (bzw. das
Verzeichnis) c:\bootloader\stk500boot bauen soll, und es sagt dir
daraufhin, dass es keine Ahnung hat, wie es diese Aufgabe verrichten
soll.

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei das Logfile.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, da wird der Compiler mit " -nostartfiles -nodefaultlibs" 
aufgerufen, also explizit verhindert das die library mit den 
eeprom-funktionen geladen wird.
Ist bei einem Bootloader ja auch sinnvoll.
Die Funktionen einfach selberschreiben oder aus dem libc-quelltext in 
dein Projekt kopieren.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ernst Bachmann wrote:

> Ist bei einem Bootloader ja auch sinnvoll.

Bedingt.  Nur, wenn man sehr knapp im Platz ist, und dann auch eher
-nostartfiles (zusammen mit einem eigenen startfile) als -nodefaultlibs.

Um diese beiden Optionen zu benutzen, sollte man aber wissen, was man
tut...

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.