GNU ARM

Gast #180336
Hallo,
beim Linken bekomme ich folgende Fehlermeldungen, und zwar nur dann,
wenn ein cast von float zu integer durchgeführt wird (erzwungen oder
gewollt). Wenn ich float Variablen definiere und  verwende, gibt es
keine Fehler.
Was fehlt "ihm" da ?


 undefined reference to `__divsf3'
 undefined reference to `__floatsisf'
main.o(.text+0x68):source/main.c:76: undefined reference to
`__mulsf3'
main.o(.text+0x70):source/main.c:76: undefined reference to
`__mulsf3'
main.o(.text+0x78):source/main.c:76: undefined reference to
`__addsf3'
main.o(.text+0x80):source/main.c:77: undefined reference to
`__fixsfsi'
main.o(.text+0x94):source/main.c:78: undefined reference to
`__addsf3'
main.o(.text+0xa4):source/main.c:80: undefined reference to `__gesf2'
Gast
Ja schon. aber es gibt in dem ARMGNU_Package so viele libs, dass ich da
doch mit dem unterscheiden überfordert bin.
Ich teste gerade alle möglichen Pfade aus.

Konrad
Gast
Die entsprechenden Funktionen gehören normalerweise zum GCC bzw.
dessen libgcc.a.  Allerdings habe ich von der ARM-Portierung des GCC
keine Ahnung, weiß also nicht, wann und unter welchen Umständen die
dort wie gebaut werden.
Gast
mglw. fehlt nur in -lc und -lgcc in den Linker-Optionen. Information
ueber den verwendeten Controller und ein Blick in das genutzte Makefile
und Link-Script wären für weitere Unterstützung hilfreich.
Gast
Das Linkerfile hänge ich dran, die Linkerzeile aus dem make-file
(DOS-batch) sieht so aus. Also auch -lc ist drin.

arm-elf-ld.exe -Map=Test9.map --cref -T.\Test9.ld  -Ttext=0x01000000
-Tdata=0x03000000 -t -static -lc  -lm  --start-group startup.o main.o
interrupt.o   -o %obj_file%

Es scheint auch kein "nicht finden" der Bibliotheken zu sein. Wenn
ich z.B. strings verwende gibt es keine Fehlermeldung.

Für ein einfaches Dividieren (wie oben beschrieben), auch bei
Verwendung von Int (keinerlei float), muss auch kein header-file
eingebunden werden.
Angehängte Dateien:
Gast
Ich meinte auch nicht, daß gar keine Libraries gefunden würden, sondern
daß die Library, die die Funktionen/Symbole

  __mulsf3, __addsf3, __fixsfsi und __gesf2

enthält, nicht zu Deinem Projekt gelinkt wird.

Keine Ahnung, welche Library das ist; ich verwende Deinen Compiler
nicht.
Gast
Das sollte man (für aus C generierten Code) allerdings immer tun.
Die Grundannahme ist, dass in einer konsistent gebauten Toolchain der
Compilertreiber immer weiß, was er woher und in welcher Reihenfolge zu
linken hat, daher nimmt man den Compilertreiber statt dem Linker
selbst.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.