2013-03-20 13 views
12

Sfortunatamente, sto riscontrando delle difficoltà nella compilazione incrociata di Git per l'architettura ARMv6.Come eseguire la cross-compilazione di Git per ARM?

Ma prima di iniziare descrivendo i passi che ho preso e comandi ho inserito, dovrei descrivere brevemente l'ambiente di compilazione:

  • Io sono cross-compilazione su Ubuntu 12.10 a 64 bit.
  • Il cross-compilatore è installato su /home/my_name/cctoolchain (questa directory contiene bin/, lib/, ecc.).

Ho iniziato afferrando Git 1.8.2 da here. Dopo aver estratto la directory mi sono imbattuto:

export PATH=$PATH:/home/my_name/cctoolchain/bin

Ho anche eseguito autoconf per assicurarsi che ./configure era fino ad oggi. Poi ho invocato ./configure come segue:

./configure --prefix=/home/my_name/git-arm --build=x86_64-linux-gnu 
    --host=arm-linux-androideabi

Questo ha funzionato per un paio di secondi e poi interrotta con:

checking whether system succeeds to read fopen'ed directory... 
configure: error: in `/home/my_name/git-1.8.2': 
configure: error: cannot run test program while cross compiling

aprivo configure.ac e le linee rimosso 806-825, disabilitando il test. Dopo averlo fatto, ho anche dovuto rimuovere le righe 806-839 per un motivo simile.

A questo punto, è stato possibile completare lo script ./configure. Ho poi eccitato corse make per costruire Git e dopo qualche istante, sono imbattuto in questo errore:

fetch-pack.c: In function 'fetch_pack': 
fetch-pack.c:928:16: error: 'struct stat' has no member named 'st_mtim' 
make: *** [fetch-pack.o] Error 1

In qualche modo ho la sensazione che sto "facendo male". Sembra qualcosa che dovrebbe essere molto più facile della rimozione manuale dei test da configure.ac. Cosa mi manca?

+2

Grazie, la tua domanda mi ha aiutato molto! Il comando che alla fine ha funzionato per me era 'CC = armv7l-timesys-linux-gnueabi-gcc CFLAGS =" - sysroot =/home/mmes/projects/arm-cross-sdk/tags/0.1.8 "LDFLAGS =" - -sysroot =/home/evadeflow/projects/arm-cross-sdk/tags/0.1.8 "./configure --prefix =/home/evadeflow/git-arm --build = i386-linux-gnu --host = armv7l-Timesys-linux-gnueabi'. (Il '--sysroot =' arg non dovrebbe essere necessario per la maggior parte delle persone.) Ho anche dovuto commentare alcuni test in 'configure.ac' come descritto (' ac_cv_fread_reads_directories' e 'ac_cv_snprintf_returns_bogus'), ed eseguire' make configurare' dopo. – evadeflow

risposta

10

La macro che non funziona è ST_MTIME_NSEC in git-compat-util.h. Questa macro è controllata dalle macro USE_NSEC, NO_NSEC e USE_ST_TIMESPEC, fornite sulla riga di comando di build o da config.mak.uname, non da configure.

E dovrebbe essere che, se non sono previste opzioni, git non tenta di utilizzare timestamp nanosecondi (o st_mtim) a tutti, ma sembra come un insetto scivolato attraverso.

Prova make NO_NSEC=1 e vedi se questo risolve il tuo problema.

+0

** Ha funzionato! ** Dopo aver fornito il parametro extra per 'make', il file fastidioso è stato compilato e il resto dell'applicazione sembra essere in costruzione (almeno fino ad ora). –

+0

@NathanOsman Puoi fornire alcuni binari di git ARM su un sito da qualche parte in modo da poterlo scaricare senza dover costruire?Sarebbe molto apprezzato! –

Problemi correlati