2013-03-20 423 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