Forum: Compiler & IDEs Linker-Fehler


von Benedikt L. (Gast)


Lesenswert?

Hallo zusammen,

bin gerade von AVR-Studio auf Eclipse umgestiegen. Hat bis jetzt gut 
funktioniert.
Jetz wollte ich ausnahmsweise die funktions sprintf() benutzen
und schon bringt mir der Linker einen Fehler
Ich hab die stdio.h eingebunden.

Linker Output:
Invoking: AVR C Linker
avr-gcc -Wl,-Map,ArbGenerator2.1.map -mmcu=atmega128 -o 
"ArbGenerator2.1.elf"  ./Bitmap.o ./Draw.o ./F16X8A.o ./F16X8B.o 
./F16X8C.o ./F8X6.o ./F8X8A.o ./F8X8B.o ./Fontsoft.o ./Main.o ./T6963.o 
./circle.o ./data.o ./f6x4fv.o ./f6x5fv.o ./f8x6fv.o ./f8x8fv.o 
./globals.o ./hardwaretreiber.o ./uart.o ./utilitys.o
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr51\li 
bc.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.fplib+0x10): relocation truncated to fit: R_AVR_13_PCREL against 
symbol `__mulsf3' defined in .text section in 
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/avr51\libgcc.a(_mul_sf.o)
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr51\li 
bc.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.fplib+0x20): relocation truncated to fit: R_AVR_13_PCREL against 
symbol `__mulsf3' defined in .text section in 
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/avr51\libgcc.a(_mul_sf.o)
make: *** [ArbGenerator2.1.elf] Error 1


Leider kann ich nicht lokalisieren wo der Fehler liegt.
Wenn ich sprintf() auskommentiere sind die Fehler weg


Kann da jemand drüberschaun oder weis einer eine Möglichkeit den Fehler 
besser einzugrenzen?


Danke!

Benedikt Lippert

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hilft -lm am Ende der Linker-Zeile?

von Benedikt L. (Gast)


Lesenswert?

Hallo

Building target: ArbGenerator2.1.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,ArbGenerator2.1.map -lm -mmcu=atmega128 -o 
"ArbGenerator2.1.elf"  ./Bitmap.o ./Draw.o ./F16X8A.o ./F16X8B.o 
./F16X8C.o ./F8X6.o ./F8X8A.o ./F8X8B.o ./Fontsoft.o ./Main.o ./T6963.o 
./circle.o ./data.o ./f6x4fv.o ./f6x5fv.o ./f8x6fv.o ./f8x8fv.o 
./globals.o ./hardwaretreiber.o ./uart.o ./utilitys.o
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr51\li 
bc.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.fplib+0x10): relocation truncated to fit: R_AVR_13_PCREL against 
symbol `__mulsf3' defined in .text section in 
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/avr51\libgcc.a(_mul_sf.o)
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr51\li 
bc.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.fplib+0x20): relocation truncated to fit: R_AVR_13_PCREL against 
symbol `__mulsf3' defined in .text section in 
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/avr51\libgcc.a(_mul_sf.o)
make: *** [ArbGenerator2.1.elf] Error 1


Hast du das so gemeint?

Funktioniert wieder nicht.


Danke aber!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benedikt Lippert schrieb:
> Hast du das so gemeint?

Nein, denn er schrieb: "*am Ende* der Linkerzeile".  Bei dir steht's
am Anfang, dort wird es (effektiv) ignoriert.

von Stefan E. (sternst)


Lesenswert?

Benedikt Lippert schrieb:
> Hast du das so gemeint?

Nein, meinte er nicht. Er meinte ans Ende der Zeile, also hinter die 
ganzen o-Files.

von Benedikt L. (Gast)


Lesenswert?

Hallo
Oh sorry
nun ist es am Ende und es funktioniert.

Was bedeutet der Befehl -lm?
Gibts da irgendwo eine Erklärung zu den Linker Einstellungen?

Vielen Dank!

mfg Benedikt

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benedikt Lippert schrieb:

> Was bedeutet der Befehl -lm?

Dass die Bibliothek libm.a nach Symbolen zu durchsuchen ist, die zu
diesem Zeitpunkt in der Symboltabelle "global undefined" sind.
Enthält die gerade durchsuchte Bibliothek einen Modul, der ein solches
Symbol auflöst, dann wird dieser Modul komplett dazu gelinkt und die
aktuelle Bibliothek nochmals durchsucht, falls der Modul neue "global
undefined"-Symbole verursacht hat.

Damit ist auch klar, warum die Option am Anfang der Kommandozeile
keine Wirkung hat: zu diesem Zeitpunkt gibt es noch kein einziges
Symbol mit "global undefined" in der Symboltabelle.  (Einzige
mögliche Ausnahme hier: wenn man ein solches Symbol durch die
Linkeroption -u selbst auf der Kommandozeile bereits erzeugt.)

> Gibts da irgendwo eine Erklärung zu den Linker Einstellungen?

Im Linker-Handbuch der GNU binutils.

von Benedikt L. (Gast)


Lesenswert?

Hallo
Danke für die Erklärung.
Im Groben versteh ich was der Befehl macht. Muss mich mal genau in den 
"Linker" einlesen.
Bin doch nur E-Technikstudent und kein Informatiker^^

mfg Benedikt Lippert

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benedikt Lippert schrieb:
> Bin doch nur E-Technikstudent und kein Informatiker^^

Ich habe auch "nur" Elektroniktechnologie studiert. ;-)

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.