Problem mit der mathlib?

OP #989406
Lesenswert?

Hallo,
ich muss (leider) ein paar Funktionen aus der mathlib verwenden, aber 
irgendwie will das nicht so ganz. Ich kann die math.h einbinden, aber 
wenn ich dann z.B. sqrt() verwende und den Kram compiliere, haut er mir 
das um die Ohren:

>c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr5\li bc.a(fp_p
>owsodd.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/avr5\libgcc.a(_mul_sf.o)
>c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr5\li bc.a(fp_p
>owsodd.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/avr5\libgcc.a(_mul_sf.o)

Meinen Nachforschungen zur Folge ligt es daran, dass er die mathlib 
nicht mit einlinkt, also habe ich an mein avr-gcc Befehl "-lm" 
angehängt, aber das ändert absolut nichts.
Mein Compilierbefehl sieht momentan so aus:

avr-gcc -g -lm -Os -std=gnu99 -mmcu=%microcontroller% %datei1% %datei2% 
%datei3% %datei4% %datei5% %datei6% %datei7% %datei8% %datei9% -o 
%dateioutput_name%.elf -DF_CPU=%F_CPU% -Wall

(in einer bat, desshalb die %)
OP #989415
Lesenswert?

Lol, ich habs! Wie bescheuert ist das denn???
Man muss das -lc HINTER die Dateinamen tun im gcc Aufruf, dann 
klappts.
Kann mir jemand erklären was das soll?

PS: habe gelesen, dass es in manchen Fällen auch helfen soll noch -lc 
dran zu hängen, falls jemand vor dem Problem steht ;)
#1198352
Lesenswert?

So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung 
mit folgender Zeile:
1
#include <math.h>
2

3
...
4

5
extension = sin (a*pi/180);


Hab auch brav den Link gelesen, nur versteh ich nicht ganz, wo ich das 
-lm oder -lc einfügen muss. Bin mal bei Project -> Configuration options 
-> custom options rein und habs überall mal probiert einzufügen, aber 
hat nix gebracht.
OP #1198356
Lesenswert?

Welche IDE verwendest du denn? Vermutlich AVR Studio.
Da gibts einige Möglichkeiten. Das sauberste ist sicher du trägst sie 
unter Librarys mit ein, kann dir aber leider nicht sagen wo die genau 
liegt. Es sollte auch gehen, wenn du auf "Custom Opetions" gehst und 
dort unter [Linker Options] das -lm hinzufügst.
#1198360
Lesenswert?

Markus F. wrote:
> So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung
> mit folgender Zeile:
>
>
1
> #include <math.h>
2
> 
3
> ...
4
> 
5
> extension = sin (a*pi/180);
6
>
>
>
> Hab auch brav den Link gelesen, nur versteh ich nicht ganz, wo ich das
> -lm oder -lc einfügen muss. Bin mal bei Project -> Configuration options
> -> custom options rein und habs überall mal probiert einzufügen, aber
> hat nix gebracht.


http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio

die libprintf_flt.a kannst du weglassen

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