2014-04-16 10 views
8

Ich Kompilieren ein Hallo Welt Programm in C auf einem 64-Bit-Linux-Maschine. Ich verwende eine GCC ARM Embedded Toolchain, um mein Programm auf einem FOX G20 V Board mit einem ATMEL AT91SAM9G20 Prozessor zu kompilieren.Kompilieren mit Arm-ohne-EABI-gcc und die Verknüpfung Bibliothek liba.a Fehler

Auf dem ersten Take, hatte ich ein paar Fehler bei der Kompilierung, da das Programm nicht die printf erkannt hat, usw. Funktionen geben (die Standard-C-Funktionen). Also habe ich beschlossen, die Verbindung zwischen den Funktionen zu machen, die ich glaube, definiert sind, in der libc.a Bibliothek (korrigiert mich wenn ich falsch liege), von arm-none-eabi-gcc -o hello hello.c libc.a zu tun, aber das Ergebnis noch immer zu Fehlern:

libc.a(lib_a-exit.o): In function `exit': 
exit.c:(.text.exit+0x16): undefined reference to `_exit' 
libc.a(lib_a-sbrkr.o): In function `_sbrk_r': 
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' 
libc.a(lib_a-writer.o): In function `_write_r': 
writer.c:(.text._write_r+0x10): undefined reference to `_write' 
libc.a(lib_a-closer.o): In function `_close_r': 
closer.c:(.text._close_r+0xc): undefined reference to `_close' 
libc.a(lib_a-fstatr.o): In function `_fstat_r': 
fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat' 
libc.a(lib_a-isattyr.o): In function `_isatty_r': 
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty' 
libc.a(lib_a-lseekr.o): In function `_lseek_r': 
lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek' 
libc.a(lib_a-readr.o): In function `_read_r': 
readr.c:(.text._read_r+0x10): undefined reference to `_read' 
collect2: error: ld returned 1 exit status 

Ich bin mir nicht sicher, warum das Programm die Standardfunktionen immer noch nicht erkennt, obwohl ich die Bibliothek mit der Anwendung verknüpft habe. Wenn jemand einen Grund hat, warum, oder eine Lösung, wie ich dieses Problem beheben kann, wäre ich sehr dankbar.

UPDATE

ich die glibc-Bibliothek von here heruntergeladen haben. Ich habe eine statische Bibliothek aus der syscalls.c-Bibliothek kompiliert und erstellt, die ich in newlib-2.1.0/libgloss/arm gefunden habe und wenn ich die Bibliothek mit meinem Anwendungscode verknüpfe, bekomme ich immer noch den gleichen Fehler.

+2

Genau das, was GCC ARM Embedded-Toolchain verwenden Sie? Es sieht so aus, als wären die undefinierten Referenzen Funktionen, von denen Sie (oder jemand) erwarten, dass sie schreiben, um die Bibliothek 'libc.a' in die spezifische Plattform zu integrieren. –

+1

@MichaelBurr Es ist die vorinstallierte 32-Bit-Version von Linero GCC. Also gibt es etwas, das ich der 'libc.a' Bibliothek hinzufügen müsste? Was könnte das sein, wenn das so ist? – Adam

Antwort

15

Versuchen Sie, diese Ausführung:

arm-none-eabi-gcc --specs=rdimon.specs -lgcc -lc -lm -lrdimon -o hello hello.c 

Ihr Toolkit scheint die librdimon.a, eine Bibliothek zu schaffen, die die grundlegenden Standard-C-Funktionen zur Verfügung stellt.