undefined reference to `__eeprom_write_byte_1C1D1E

Gast #368220
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
Moderator Persönliche Seite #831334
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:
1
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).
Persönliche Seite #831346
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:
>
>
1
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
Moderator Persönliche Seite #831366
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.
Persönliche Seite #831394
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. ;-)
Moderator Persönliche Seite #831404
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?
Persönliche Seite #831413
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.).
#831520
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren