STM32 programm mit FLOAT Zahlen

Gast #891934
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.
#892163
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.
Gast #892264
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.
#892304
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. ;-)
Gast #892380
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

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.

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.