2013-03-20 428 views
12

不幸的是,我很难交叉编译ARMv6体系结构的Git。如何交叉编译Git for ARM?

但是在我开始介绍我进入我所采取的步骤和命令之前,我简要介绍一下编译环境:

  • 我是交叉编译在Ubuntu 12.10 64位。
  • 交叉编译器安装到/home/my_name/cctoolchain(该目录包含bin/,lib/等)。

我开始从here抓住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脚本能够完成。我兴奋地接着跑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之后配置。 – evadeflow 2014-10-20 22:02:03

回答

10

该失败的宏是ST_MTIME_NSECgit-compat-util.h。这个宏由宏USE_NSEC,NO_NSECUSE_ST_TIMESPEC控制,它们在构建命令行或config.mak.uname上提供,而不是通过配置。

应该是,如果没有提供选项,Git并不试图利用纳秒时间戳(或st_mtim)所有,但它看起来像一个bug溜通过。

尝试make NO_NSEC=1并查看是否可以解决您的问题。

+0

**它工作!**在为'make'提供额外参数后,编译的麻烦文件和应用程序的其余部分似乎正在建立(至今为止)。 – 2013-03-20 06:13:23

+0

@NathanOsman你可以在某个网站上提供一些ARM git的二进制文件,这样我就可以下载它,而无需构建?将不胜感激! – 2014-10-02 20:13:29