GNU ARM

Gast #180336
Lesenswert?

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 #180339
Lesenswert?

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 #180340
Lesenswert?

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 #180341
Lesenswert?

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 #180343
Lesenswert?

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 #180345
Lesenswert?

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

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