Forum: Mikrocontroller und Digitale Elektronik Wie lösen (float): relocation truncated to fit: R_AVR_13_PCREL


von Emperor_L0ser (Gast)


Angehängte Dateien:

Lesenswert?

Moin,
ich habe eine ganze Reihe von Floatingpoint Berechnungen (siehe Anhang) 
auf einem AVR zu tun. Leider lässt sich der Code nicht compilieren. Der 
Linker meldet:
1
/usr/lib/gcc/avr/4.3.3/../../../avr/lib/avr51/libc.a(atan2.o):../../../libm/fplib/atan2.S:136: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.3.3/avr51/libgcc.a(_addsub_sf.o)
2
/usr/lib/gcc/avr/4.3.3/../../../avr/lib/avr51/libc.a(fp_arccos.o):../../../libm/fplib/fp_arccos.S:76: relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3' defined in .text section in /usr/lib/gcc/avr/4.3.3/avr51/libgcc.a(_addsub_sf.o)

Sowie noch etwa 5 weiterer solcher Zeilen. Die Suchfunktion und Google 
brachte herraus, dass man die Mathebibliothek einbinden muss. Bei den 
ganzen Berechnungen, die ich dort veranstalte, ist mir das auch klar. 
Habe die Mathebibliothek auch mittels "-lm" angegeben, aber leider ohne 
Erfolg.

Befehl zum Kompilieren
1
avr-gcc -O2 -mmcu=at90can128 -DF_CPU=8000000 -std=gnu99 ./*.c

Das ganze wird bei mir also ohne Makefile kompiliert. Ich benutze 
einfach ein kleines Shellskript.


mfg Emperor_L0ser

von Emperor_L0ser (Gast)


Lesenswert?

Das Problem habe ich mit noch einigen Stolpersteinen mehr gelöst 
bekommen.
Man muss die Mathebibliothek nicht nur angeben, sondern auch an der 
richtigen Stelle.
Dafür muss man den Befehl zum Kompilieren und Linken einzeln angeben, 
sonst steht das "-lm" beim Linken nicht richtig.

für mich sieht das ganze ohne tolles Script usw wie folgt aus.
1
avr-gcc -O2 -mmcu=at90can128 -DF_CPU=8000000UL -Wall -c uart.c
2
avr-gcc -O2 -mmcu=at90can128 -DF_CPU=8000000UL -Wall -c main.c
3
avr-gcc -O2 -mmcu=at90can128  -Wl,-u,vfprintf -lprintf_flt -lm main.o uart.o -lm

mfg Emperor_L0ser

von Benjamin K. (2mkx)


Lesenswert?

Wunderbar,
einmal ins Makefile -lm ergänzt, so dass es vor dem *.elf Parameter 
steht und schon gehts :D

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.