Как перекрестно скомпилировать Git для ARM?
К сожалению, у меня возникли трудности с кросс-компиляцией Git для архитектуры ARMv6.
Но прежде чем я начну описывать шаги, которые я принял, и команды, которые я ввел, я должен кратко описать среду сборки:
- Я перекрестно компилирую на Ubuntu 12.10 64-bit.
- Кросс-компилятор устанавливается в
/home/my_name/cctoolchain
(этот каталог содержит bin/
, lib/
и т.д.).
Я начал с захвата Git 1.8.2 из здесь. После извлечения каталога я побежал:
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
script. Затем я взволнованно провел 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
. Что мне не хватает?
Ответы
Ответ 1
Макрос с ошибкой ST_MTIME_NSEC
в git-compat-util.h
. Этот макрос управляется макросами USE_NSEC
, NO_NSEC
и USE_ST_TIMESPEC
, которые указаны в командной строке сборки или config.mak.uname
, а не configure.
Должно быть, если никаких параметров не предусмотрено, git не пытается использовать наносекундные метки времени (или st_mtim
) вообще, но похоже, что ошибка проскользнула.
Попробуйте make NO_NSEC=1
и проверьте, устраняет ли это вашу проблему.