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.
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ą. –
@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