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'
Das scheint eine Linkerfehlermeldung zu sein. Mal die von Dir gelinkten Libraries überprüft?
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
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.
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.
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.
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
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.
Hatte das selbe Problem. Habe einfach anstatt des LD den gcc zum linken benutzt (mit den selben Libs gelinkt). Gruß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.