2014-04-16 17 views
8

Sto compilando un programma Hello World in C su una macchina Linux a 64 bit. Sto usando una toolchain GCC ARM embedded per compilare il mio programma su una FOX G20 V con un processore ATMEL AT91SAM9G20.Compilazione utilizzando arm-none-eabi-gcc e libreria di collegamento errore liba.a

Al primo take, ho avuto alcuni errori durante la compilazione perché il programma non riconosceva le funzioni printf, return etc. (le funzioni C standard). Così ho deciso di fare il collegamento tra le funzioni, che credo sono definiti nella libreria libc.a (correggetemi se sbaglio), facendo arm-none-eabi-gcc -o hello hello.c libc.a ma il risultato i risultati ancora in errori:

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 

Sono davvero incerto sul motivo per cui il programma non riconosce ancora le funzioni standard anche se ho collegato la libreria all'applicazione. Se qualcuno ha una motivazione sul perché, o una soluzione su come posso risolvere questo problema, sarei molto grato.

UPDATE

Ho scaricato la libreria glibc da here. Ho compilato e creato una libreria statica dalla libreria syscalls.c che ho trovato in newlib-2.1.0/libgloss/arm e quando collego la libreria al mio codice applicazione, ho ancora lo stesso errore.

+2

Esattamente quello che GCC ARM ha integrato con la toolchain? Sembra che i riferimenti indefiniti siano funzioni che ci si aspetta (o qualcuno) di scrivere per integrare la libreria 'libc.a' sulla piattaforma specifica. –

+1

@MichaelBurr È la versione pre-costruita a 32 bit di Linero GCC. Quindi c'è qualcosa che dovrei aggiungere alla libreria 'libc.a'? Cosa potrebbe essere se così? – Adam

risposta

15

Prova l'esecuzione di questo:

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

vostro toolkit sembra fornire il librdimon.a, una libreria che fornisce le funzioni di base di serie C.

Problemi correlati