2013-03-20 43 views
12

Thật không may, tôi gặp khó khăn khi biên dịch chéo Git cho kiến ​​trúc ARMv6.Làm thế nào để biên dịch chéo Git cho ARM?

Nhưng trước khi tôi bắt đầu mô tả các bước tôi đã thực hiện và lệnh tôi đã nhập, tôi nên mô tả ngắn gọn về xây dựng môi trường:

  • Tôi cross-biên soạn trên Ubuntu 12.10 64-bit.
  • Trình biên dịch chéo được cài đặt vào /home/my_name/cctoolchain (thư mục này chứa bin/, lib/, v.v.).

Tôi bắt đầu bằng cách lấy Git 1.8.2 từ here. Sau khi giải nén vào thư mục Tôi chạy:

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

Tôi cũng chạy autoconf để đảm bảo rằng ./configure đã được cập nhật. Sau đó, tôi gọi ./configure như sau:

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

này chạy cho một vài giây và sau đó bị hủy bỏ với:

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

tôi nứt mở configure.ac và loại bỏ dòng 806-825, vô hiệu hóa các thử nghiệm. Sau khi làm điều đó, tôi cũng phải loại bỏ các dòng 806-839 vì một lý do tương tự.

Tại thời điểm này, tập lệnh ./configure có thể hoàn tất. sau đó tôi hào hứng chạy make để xây dựng Git và sau hơn một vài phút, chạy vào lỗi này:

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

Bằng cách nào đó tôi có cảm giác tôi đang "làm việc đó sai". Điều này nghe có vẻ dễ dàng hơn nhiều so với việc xóa các thử nghiệm theo cách thủ công từ configure.ac. Tôi đang thiếu gì?

+2

Cảm ơn, câu hỏi của bạn đã giúp tôi rất nhiều! Lệnh cuối cùng làm việc cho tôi là 'CC = armv7l-timesys-linux-gnueabi-gcc CFLAGS =" - sysroot =/home/mmes/dự án/arm-cross-sdk/thẻ/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'. (Các '--sysroot =' arg không cần thiết cho hầu hết mọi người.) Tôi cũng đã nhận xét một số thử nghiệm trong 'configure.ac' như bạn đã mô tả (' ac_cv_fread_reads_directories' và 'ac_cv_snprintf_returns_bogus'), và chạy' make cấu hình' sau đó. – evadeflow

Trả lời

10

Macro không thành công là ST_MTIME_NSEC trong git-compat-util.h. Macro này được điều khiển bởi các macro USE_NSEC, NO_NSECUSE_ST_TIMESPEC, được cung cấp trên dòng lệnh xây dựng hoặc bởi config.mak.uname, không phải theo cấu hình.

nên là nếu không có tùy chọn được cung cấp, git không cố gắng sử dụng dấu thời gian nano giây (hoặc st_mtim) ở tất cả, nhưng có vẻ như một lỗi trượt qua.

Hãy thử make NO_NSEC=1 và xem cách đó có giải quyết được sự cố của bạn hay không.

+0

** Đã hoạt động! ** Sau khi cung cấp tham số bổ sung cho 'make', tệp phiền toái được biên dịch và phần còn lại của ứng dụng dường như đang xây dựng (cho đến nay, dù sao). –

+0

@NathanOsman Bạn có thể cung cấp một số tệp nhị phân ARM git trên một trang web ở đâu đó để tôi có thể tải xuống mà không cần phải xây dựng không?Sẽ được nhiều đánh giá cao! –

Các vấn đề liên quan