Forum: Compiler & IDEs GNU ARM


von Konrad (Gast)


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'

von Rufus T. Firefly (Gast)


Lesenswert?

Das scheint eine Linkerfehlermeldung zu sein. Mal die von Dir gelinkten
Libraries überprüft?

von Konrad (Gast)


Lesenswert?

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

von Jörg Wunsch (Gast)


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.

von mthomas (Gast)


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.

von Konrad (Gast)


Angehängte Dateien:

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.

von mthomas (Gast)


Lesenswert?

hmm, testweise vielleicht einfach noch ein -lgcc dazu. ich nutze
makefiles, vielleicht hilft eines aus meinen WinARM-Beispielen weiter:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html

von Rufus T. Firefly (Gast)


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.

von Marius Goebel (Gast)


Lesenswert?

Hatte das selbe Problem. Habe einfach anstatt des LD den gcc zum linken
benutzt (mit den selben Libs gelinkt).

Gruß

von Jörg Wunsch (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.