Forum: Mikrocontroller und Digitale Elektronik AVR C Linker Error


von Ralph F. (feucom)


Lesenswert?

Hallo,
Der Linker bringt bei meinem Projekt die unten angehangenen Fehler. Ich 
hatte das schon mal, da hatte -lm im Libraries-eintrage gefehlt und die 
Sache war behoben. Nur diesmal klappt es nicht.
Weiss vielleicht jemand Rat?
Vielen Dank schon mal.

Ich benutze Eclipse und WINAVR 20100110.




Invoking: AVR C Linker
avr-gcc -Wl,-Map,vario_gleitwinkel.map -mmcu=atmega16 -im Libero 
"vario_gleitwinkel.elf"  ./src/BMP180.o ./src/DEM16216.o ./src/anemo.o 
./src/funktionen.o ./src/gps.o ./src/main.o ./src/tasten.o 
./src/twimaster.o ./src/uart.o
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(log.o):  In function `log':
(.text.avr-libc.fplib+0x46): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__addsf3' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_addsub_sf.o)
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(log.o):  In function `log':
(.text.avr-libc.fplib+0x4e): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__addsf3' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_addsub_sf.o)
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(log.o):  In function `log':
(.text.avr-libc.fplib+0x6a): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__floatsisf' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_si_to_sf.o)
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(pow.o):  In function `pow':
(.text.avr-libc.fplib+0x94): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__mulsf3' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mul_sf.o)
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(inverse.o):  In function `inverse':
(.text.avr-libc.fplib+0xc): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__divsf3' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_div_sf.o)
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(modf.o):  In function `modff':
(.text.avr-libc.fplib+0x3e): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__subsf3' defined in .text section in 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_addsub_sf.o)
make: *** [vario_gleitwinkel.elf] Error 1
ich verwende WinAVR  - 20100110

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ralph F. schrieb:
> Ich hatte das schon mal, da hatte -lm im Libraries-eintrage
> gefehlt und die Sache war behoben. Nur diesmal klappt es nicht.
>
> Ich benutze Eclipse und WINAVR 20100110.
>
> avr-gcc -Wl,-Map,vario_gleitwinkel.map -mmcu=atmega16 -im Libero
> "vario_gleitwinkel.elf"  ./src/BMP180.o ./src/DEM16216.o ./src/anemo.o
> ./src/funktionen.o ./src/gps.o ./src/main.o ./src/tasten.o
> ./src/twimaster.o ./src/uart.o

Und wo ist das -lm?

Ich würd dir eine Version der Tools ans Herz legen, die diesen Bug nicht 
mehr hat, d.h. 4.7.2+

https://gcc.gnu.org/PR54461

Und falls es die 4.7 ist, darauf achten, dass configure mit 
--with-avrlibc ausgeführt wurde (bei 4.8+ ist diese Option an per 
default).

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

...weiters verwendet die avr-libc RJMP ohne sicherzustellen, dass 
Sprungziele tatsächlich per RJMP erreichbar sind:

https://savannah.nongnu.org/bugs/?33698

Behoben ist dieses Problem erst mit der avr-libc 1.8.1.  Als Work-Around 
kannst du eine eigene Linker-Description verwendet, die garantiert, dass 
entsprechende .text Input-Sections der avr-libc dicht beieinander 
liegen.

von Ralph F. (feucom)


Lesenswert?

Hallo,

vielen dank Johann, aus den angehangen links habe ich rausbekommen das 
die math.h und deren funktionen diesen Fehler auftreten lässt. Wenn ich 
weder float noch eine math funktion nehme ist der Fehler weg.
Bez. des vorgeschlagenen Work-Around, hänge ich voll in der Luft. Ich 
benutze WINAVR 20100110 (die "neuste" version). Die avrlibc hat die 
versionsnummer 1.6.7. , der gcc compiler ist version 4.3.3.
aber was ich genau machen muss ..?
Ich werd noch ein bisschen lesen.
gruss
bis bald

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.