www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 programm mit FLOAT Zahlen


Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

In meinem Projekt muss ich float Zahlen benutzen, aber beim Linken 
erhalte ich folgende Fehler:

undefined reference to `__aeabi_ui2f'
undefined reference to `__aeabi_fdiv'
:  :  :  :  :
GNU ld (Sourcery G++ Lite 2008q1-126) 2.18.50.20080215

Ich starte den Linker mit folgendem Kommando:

arm-none-eabi-ld -v -lgcc 
-LC:/WinARM/CodeSourcery/lib/gcc/arm-none-eabi/4.2.3/thumb 
-Tprj/STM32F103CB-ROM.ld -Map=main.map out/lib/src/cortexm3_macro.o 
out/src/main.o out/src/stm32f10x_it.o out/src/stm32f10x_vector.o 
out/src/analogout.o --output main.elf

Der Pfad vom Parameter -L existiert, die Datei libgcc.a ebenfalls.

Ich habe auch schon in der LD-Datei den Parameter "SEARCH_DIR()" anstatt 
-L gesetzt, hatauch nicht geholfen.
Wenn ich den -l Parameter falsch schreibe, dann sagt er, er würde die 
Datei nicht finden, also die Datei libgcc.a findet er. Die Funktionen 
"__aeabi_ui2f" usw. sind auch drin.

Hat jemand eine Idee warum es nicht geht?
Vielen Dank im Voraus.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häng das -lgcc mal hinter die Liste von *.o Files.

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Hr. Kaiser, jetzt gehts !!!!
Ein netter kleiner Bug von arm-none-eabi-ld.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein Bug, sondern eine 4 Jahrzehnte alte Tradition der Linker in 
Unix-Systemen und deren Verwandten.

Die heisst: Was von Libraries nicht gebraucht wird fliegt raus. Strikt 
der Reihe nach von links nach rechts vorgehend. Ohne Gedächtnis. Wenn 
also erst rechts von -lgcc Fliesskommafunktionen benötigt werden, dann 
nützt es nichts (mehr), dass sie in der libgcc drin stehen.

Folglich gehören Libraries fast immer hinten dran, nicht vorneweg.

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, der Linke könnte auch erst zum Schluß an das Löschen denken, und 
nicht schon am Anfang...
In jedem Fall ist es eine nützliche Info!

Wenn ich mit dem arm-none-eabi-gcc linke, dann brauche ich die libgcc.a 
nicht erst angeben, irgendwie weiß das der gcc schon von alleine. So 
klug könnte doch auch der ld sein.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Linker tut genau das was man ihm sagt. Das ist sein Job, alles 
andere wäre Anmassung. Und es ist das Programm "gcc", das als einziges 
wissen kann, dass es sich um ein C Programm handelt. Und das folglich 
den "ld" mit den entsprechenden Libraries im Schlepptau aufruft.

Einfacher: Wer ohne Not "ld" direkt aufruft, kriegt was er verdient. ;-)

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, das hab ich nun auch verstanden. Besser ist es den gcc zum linken 
zu verwenden, der gcc ruft dann den ld auf, auch mit den libXYZ.a. Nur 
den Pfad zu den Libs, die man verwenden möchte muss der natürlich wissen 
(-L Parameter).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.