Hallo zusammen, ich hab hier eine kleine Box (ARM 920t) mit BusyBox (Linux 2.6.22) und Zugriff auf das Dateisystem. Würde gerne ein HelloWorld C-Programm auf Vista kompilieren, aufs target-System kopieren und ausführen. Habe dazu installiert: Eclipse for C/C++ (eclipse-cpp-galileo-SR1-win32.zip) Eclipse CDT (cdt-master-6.0.1.zip) GNUARM Plugin (org.eclipse.cdt.cross.arm.gnu_0.5.3.200904072239.jar) GNUARM (bu-2.16.1_gcc-4.1.0-c-c++_nl-1.14.0_gi-6.4.exe) Nun mache ich in Eclipse ein neues "C-Project", "ARM Cross Target Aplication" und füge ein main.c hinzu. Unter Properties->Target Processor wähle ich "arm920t" aus und compiliere. Leider bekomme ich beim linken dann: ... Building target: App_gnuarm.elf Invoking: ARM Windows GCC C Linker arm-elf-gcc -nodefaultlibs -Wl,-Map,App_gnuarm.map -mcpu=arm920t -mthumb -g3 -gdwarf-2 -o"App_gnuarm.elf" ./main.o /cygdrive/c/gnuarm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/ thumb/crt0.o: In function `__change_mode': ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:89: undefined reference to `memset' ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:95: undefined reference to `initialise_monitor_handles' ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:216: undefined reference to `atexit' ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:217: undefined reference to `__libc_init_array' ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:223: undefined reference to `exit' /cygdrive/c/gnuarm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/ thumb/crt0.o: In function `change_back': ../../../../../../../newlib-1.14.0/newlib/libc/sys/arm/crt0.S:238: undefined reference to `__libc_fini_array' collect2: ld returned 1 exit status make: *** [App_gnuarm.elf] Error 1 Habe das Gleiche bereits mit Winarm, cygwin und yagarto ausprobiert ...kein Erfolg. Leider bin ich ziemlich unerfahren in diesem Gebiet...Mache ich hier denn grundsätzlich das Richtige? Sind die Linker-Optionen denn richtig? Kann leider kein Makefile schreiben und dachte, daß Eclipse mit der Toolchain eben gerade dafür da ist. Hat hier jemand schon mal ein ähnliches Problem gehabt oder kennt jemand eine Anleitung oder Beispiel für ein simples ausführbares C-Programm für ein ARM-target mit Linux? Vielen Dank...komme selber nicht mehr weiter.
Wenn sich sinst keiner bemüßigt fühlt... Ich habe nun keine Ahnung von deinem konkreten System, aber die Fehlermeldungen kommen mir trotzdem bekannt vor. Das Problem ist, daß du mit -nodefaultlibs explizit sagst, keine Standard-Laufzeit-Bibliotheken haben zu wollen und dementsprechend die Meldung bekommst, daß aus der Standard-C-Lib dann logischerweise memset() etc. fehlen. 1. Lösungsmöglichkeit: im Makefile oder wo auch immer es definiert ist -nodefaultlibs entfernen. Kann klappen, muß aber nicht - vielleicht ist es ja mit Absicht da. -oder- 2. Die fehlenden Bibliotheken dazu linken (bei den Linkeroptionen). Das geht z.B. mit der Option -lc (für eine libc.a beispielsweise) oder Angabe des Klarnamens (z.B. libc.a). Die Standardfunktionen wie memset sind in der C-Lib zu finden, die wie gesagt libc.a oder so ähnlich heißen wird. Andere Namen, die vielleicht auch angemäkelt werden und dort nicht drin sind, können dann evtl. weitere Bibliotheken nötig machen. Um herauszufinden welche das sind, kann man ein Kommando namens nm (im Original-GNU-System, ggf. bei einem System zum Crosskompilieren auch irgendwas-nm.exe oder so ähnlich). Damit kann man u.a. ausgeben lassen, welche Namen in einer Lib definiert sind (als exportierte Symbole).
Vielen Dank, Klaus! Das funktioniert... Habe mal das Project.elf aufs target kopiert und ausgeführt -> Leider "Illegal instruction" Noch ne Idee? Muss das Target das ELF-Format irgendwie explizit unterstützen? Dankeeeee
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.