2013-03-20 19 views
12

Leider habe ich Schwierigkeiten beim Übersetzen von Git für die ARMv6-Architektur.Wie kompiliere ich Git für ARM?

Aber bevor ich die Schritte beginnen beschreiben ich getroffen habe und Befehle, die ich eingegeben habe, sollte ich kurz auf die Build-Umgebung beschreiben:

  • Ich bin Cross-Kompilierung auf Ubuntu 12.10 64-bit.
  • Der Cross-Compiler ist unter /home/my_name/cctoolchain installiert (dieses Verzeichnis enthält bin/, lib/ usw.).

Ich begann mit Greifen 1.8.2 von here. das Verzeichnis Nach dem Extrahieren Ich lief:

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

Ich lief autoconf auch sicherstellen, dass ./configure auf dem neuesten Stand war. Dann aufgerufen ich ./configure wie folgt:

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

Dies lief für ein paar Sekunden und dann abgebrochen mit:

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

ich offen configure.ac geknackt und entfernten Zeilen 806-825, den Test zu deaktivieren. Nachdem ich das getan hatte, musste ich auch die Zeilen 806-839 aus einem ähnlichen Grund entfernen.

Zu diesem Zeitpunkt konnte das Skript ./configure abgeschlossen werden. Ich lief dann aufgeregt make zu Git zu bauen und nach ein paar Momente, lief in diesen Fehler:

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

Irgendwie habe ich das Gefühl, ich bin „es falsch zu machen“. Dies klingt nach etwas, das viel einfacher sein sollte als manuell Tests aus configure.ac zu entfernen. Was vermisse ich?

+2

Danke, Ihre Frage hat mir sehr geholfen! Der Befehl, der schließlich für mich funktionierte, war 'CC = Armv7l-Timesys-Linux-Gnuabi-GCC CFLAGS = "- Sysroot =/Home/Mme/Projekte/Arm-Cross-Sdk/Tags/0.1.8" LDFLAGS = "- -sysroot =/home/evadeflow/projekte/arm-cross-sdk/tags/0.1.8 "./configure --prefix =/home/evadeflow/git-arm --build = i386-linux-gnu --host = armv7l-timesys-linux-gnüabi'. (Das '--sysroot =' arg sollte für die meisten Leute nicht notwendig sein.) Ich musste auch einige Tests in 'configure.ac' auskommentieren, wie Sie es beschrieben haben (' ac_cv_fread_reads_directories' und 'ac_cv_snprintf_returns_bogus'), und make ausführen Konfigurieren Sie danach. – evadeflow

Antwort

10

Das Makro, das fehlschlägt, ist ST_MTIME_NSEC in git-compat-util.h. Dieses Makro wird von den Makros USE_NSEC, NO_NSEC und USE_ST_TIMESPEC gesteuert, die auf der Build-Befehlszeile oder config.mak.uname, nicht von konfigurieren.

Es sollte sein, dass, wenn keine Optionen vorgesehen sind, git versucht nicht Nanosekunde Zeitstempel (oder st_mtim) überhaupt zu verwenden, aber es sieht aus wie ein Bug durch gerutscht.

Versuchen Sie make NO_NSEC=1 und sehen, ob das Ihr Problem löst.

+0

** Es hat funktioniert! ** Nach der Bereitstellung der zusätzlichen Parameter zu "make", die lästige Datei kompiliert und der Rest der Anwendung scheint zu bauen (soweit, jedenfalls). –

+0

@NathanOsman Können Sie einige Binärdateien von ARM git auf einer Website bereitstellen, damit ich sie herunterladen kann, ohne sie erstellen zu müssen?Würde sehr geschätzt werden! –

Verwandte Themen