不幸的是,我在为 ARMv6 架构交叉编译 Git 时遇到困难。
但在我开始描述我所采取的步骤和我输入的命令之前,我应该简要描述一下构建环境:
- 我在 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
中手动删除测试要容易得多。我错过了什么?
最佳答案
失败的宏是 git-compat-util.h
中的 ST_MTIME_NSEC
。此宏由宏 USE_NSEC
、NO_NSEC
和 USE_ST_TIMESPEC
控制,它们在构建命令行或 config.mak 中提供。 uname
,不是通过配置。
应该是,如果没有提供任何选项,git 根本不会尝试使用纳秒时间戳(或 st_mtim
),但它看起来像是漏掉了一个错误通过。
尝试设置 NO_NSEC=1
看看是否能解决您的问题。
关于git - 如何交叉编译Git for ARM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15516168/