2013-03-20 2 views
12

К сожалению, у меня возникли трудности с кросс-компиляцией Git для архитектуры ARMv6.Как скомпилировать Git для ARM?

Но прежде чем я начну с описанием шагов, которые я взял и команды я ввели, я должен кратко описать среду сборки:

  • Я являюсь кросс-компиляции на Ubuntu 12.10 64-битным.
  • Перекрестный компилятор установлен на /home/my_name/cctoolchain (этот каталог содержит bin/, lib/ и т. Д.).

Я начал с захвата Git 1.8.2 от here. После извлечения каталога я побежал:

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

Я побежал autoconf, чтобы убедиться, что ./configure было до настоящего времени. Тогда я вызван ./configure следующим образом:

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

Это побежал в течение нескольких секунд, а затем прервана:

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

Я приоткрыл configure.ac и удалить строки 806-825, отключение теста. После этого мне также пришлось удалять строки 806-839 по той же причине.

На этом этапе скрипт ./configure был в состоянии завершить. Затем я взволнованно побежал make построить Git и после того, как еще несколько моментов, столкнулся с этой ошибкой:

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

Как-то я чувствую, что я «делают это неправильно». Это похоже на то, что должно быть намного проще, чем вручную удалить тесты с configure.ac. Что мне не хватает?

+2

Спасибо, ваш вопрос мне очень помог! Команда, которая, наконец, работала для меня, была «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'. («-sysroot =' arg не должен быть необходим большинству людей.) Мне также пришлось прокомментировать некоторые тесты в 'configure.ac', как вы описали (' ac_cv_fread_reads_directories' и 'ac_cv_snprintf_returns_bogus'), и запустить' make configure' впоследствии. – evadeflow

ответ

10

Ошибка макроса ST_MTIME_NSEC в git-compat-util.h. Этот макрос управляется макросами USE_NSEC, NO_NSEC и USE_ST_TIMESPEC, которые предоставляются в командной строке сборки или config.mak.uname, а не по настройке.

Это должен быть, если не предусмотрены никаких опций, мерзавец не пытается использовать наносекундные временные метки (или st_mtim) на всех, но это выглядит как ошибка проскочить.

Попробуйте make NO_NSEC=1 и проверьте, не решена ли эта проблема.

+0

** Это сработало! ** После предоставления дополнительного параметра 'make', сложный файл, скомпилированный, и остальная часть приложения, похоже, строится (пока что так или иначе). –

+0

@NathanOsman Можете ли вы предоставить некоторые двоичные файлы ARM git на сайте где-нибудь, чтобы я мог скачать его без необходимости строить?Было бы очень признательно! –

Смежные вопросы