mikrocontroller.net

Forum: Compiler & IDEs Problem: C-Program with Eclipse+CDT+GNUARM for ARM920t-target with Linux 2.6.22


Autor: tiigeri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: tiigeri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.