2014-04-16 7 views
8

Kompiluję program hello world w języku C na 64-bitowym komputerze z systemem Linux. Używam wbudowanego toolchaina GCC ARM do krzyżowania kompilacji mojego programu na płycie FOX G20 V z procesorem ATMEL AT91SAM9G20.Kompilowanie za pomocą algorytmu arm-none-eabi-gcc i biblioteki łączącej liba.a error

Przy pierwszym ujęciu miałem kilka błędów podczas kompilacji, ponieważ program nie rozpoznał funkcji printf, return itp. (Standardowe funkcje C). Więc postanowiłem zrobić powiązanie między funkcjami, które uważam są zdefiniowane w bibliotece libc.a (poprawcie mnie jeśli się mylę), wykonując arm-none-eabi-gcc -o hello hello.c libc.a ale wynik wciąż skutkuje błędami:

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 

Nie jestem pewien, dlaczego program nadal nie rozpoznaje standardowych funkcji, mimo że połączyłem bibliotekę z aplikacją. Jeśli ktokolwiek ma powód, dlaczego, lub rozwiązanie tego, jak mogę rozwiązać ten problem, byłbym bardzo wdzięczny.

UPDATE

Pobrałem glibc biblioteki z here. Skompilowałem i utworzyłem bibliotekę statyczną z biblioteki syscalls.c, którą znalazłem w newlib-2.1.0/libgloss/arm, a kiedy połączę bibliotekę z moim kodem aplikacji, nadal otrzymuję ten sam błąd.

+2

Dokładnie jaki zestaw narzędzi do osadzania GCC ARM jest używany? Wygląda na to, że niezdefiniowane referencje są funkcjami, których (lub ktoś) zamierzasz napisać, aby zintegrować bibliotekę 'libc.a' z określoną platformą. –

+1

@MichaelBurr Jest to gotowa, 32-bitowa wersja Linero GCC. Czy jest coś, co musiałbym dodać do biblioteki 'libc.a'? Co by to było, gdyby tak było? – Adam

Odpowiedz

15

Spróbuj wykonywania tego:

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

Twój zestaw narzędzi wydaje się dostarczyć librdimon.a, biblioteka, która zapewnia podstawowe funkcje standard C.

Powiązane problemy