Problem mit der mathlib?

OP #989406
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
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 ;)
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
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.
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.