2016-03-16 13 views
25

Khi tôi biên soạn Android 5.1.1, tôi nhận được hàng chục lỗi như thế này:Building Android từ các nguồn: không được hỗ trợ định vị lại 43

... 
... 
... 
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43 
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43 
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43 
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43 

và làm cho quá trình cuối cùng thất bại:

clang: error: linker command failed with exit code 1 (use -v to see invocation) 
build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed 
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1 

Tôi đã thử các nguồn xây dựng có và không có tiếng kêu, và với các phiên bản khác nhau của tiếng kêu vang. Nhưng trên các nhánh mới, clang là một yêu cầu và không bắt đầu mà không có nó.

Điều gì có thể sai?

Trả lời

20

Người ta phải áp dụng bản vá này để có được những điều làm việc https://android-review.googlesource.com/#/c/223100/

mở build/core/clang/HOST_x86_common.mk tập tin trong thư mục mã nguồn Android của bạn với một số biên tập thêm những dòng này, như đã đề cập trong này link

Đối với Android Lollipop hoặc bất kỳ trước phiên bản, hãy đảm bảo giữ -no-integrated-as trong khi áp dụng bản vá này. Hãy chắc chắn rằng các dòng tiếp tục là thích hợp (\ ở cuối mỗi dòng trừ dòng cuối cùng).

Nhưng, -no-integrated-as bị xóa trong Marshmallow.

+0

nhờ liên kết đến bản vá, tôi đã sử dụng git cherry-pick và có vẻ như nó hoạt động OK (bản dựng vẫn đang trong quá trình xử lý và nó chỉ là một trong những lỗi mà tôi phải sửa ... đợi cho người tiếp theo ...) – Mixaz

+0

Nó làm việc cho tôi tại thời điểm đó. – mysticTot

+0

hoạt động thực sự, thx – Mixaz

2

Bạn có đang xây dựng trên Arch Linux không? Tôi có cùng một vấn đề kể từ hôm nay. Các bản dựng trước của tôi cách đây 3 ngày và tất cả đều ổn. Hôm nay tất cả đều thất bại.

tôi thấy quản trị nâng cấp một số gói 2 ngày trước, đặc biệt là những

[2016-03-16 15:29] [ALPM] upgraded glibc (2.22-3 -> 2.23-1) 
[2016-03-16 15:29] [ALPM] upgraded lib32-glibc (2.22-3.1 -> 2.23-1) 
[2016-03-16 15:29] [ALPM] upgraded lib32-gcc-libs (5.3.0-3 -> 5.3.0-5) 
[2016-03-16 15:29] [ALPM] upgraded gcc-libs-multilib (5.3.0-3 -> 5.3.0-5) 
[2016-03-16 15:29] [ALPM] upgraded libcap (2.24-2 -> 2.25-1) 
[2016-03-16 15:29] [ALPM] upgraded binutils (2.25.1-3 -> 2.26-3) 
[2016-03-16 15:29] [ALPM] upgraded gcc-multilib (5.3.0-3 -> 5.3.0-5) 
[2016-03-16 15:29] [ALPM] upgraded libcups (2.1.2-3 -> 2.1.3-1) 

binutils có thể là thủ phạm? (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808206)

cũng thấy https://groups.google.com/d/msg/android-x86/U1XpL0tUpqw/y4W3wRCdJgAJ ...

+0

Bạn đã khắc phục bằng cách nào đó? Tôi có cùng một vấn đề với Lollipop trên Arch gần đây. – Ov3r1oad

+0

Tôi cũng tình cờ gặp lỗi báo cáo debian này: * Điều này sẽ xảy ra với gcc-5 và với gcc-4.9. Hạ cấp libc6 sẽ sửa nó. Sau khi một số fiddling tôi nhận ra rằng nâng cấp lên binutils = 2.25.90.20151209-1 (hiện tại mới nhất trong sid) sửa chữa nó. I E. với libc6 mới nhất và các gói binutils mới nhất, mọi thứ hoạt động * Hệ thống xây dựng của tôi là một thùng chứa 16,18 ubuntu trên một máy chủ lưu trữ Linux và nó không sử dụng một trong các phiên bản bị ảnh hưởng. Nhưng hệ thống xây dựng Android đang chọn trình liên kết của mình từ thư mục dựng sẵn của riêng nó (gcc 4.6, glibc 2.11). ** Vì vậy, làm thế nào chúng ta có thể sử dụng các công cụ xây dựng trên toàn hệ thống với Android? ** –

+0

Khi tôi hiểu ý tưởng, việc sử dụng docker có thể giúp thiết lập môi trường thời gian xây dựng: https://github.com/justfortherec/fairphone2-build- Tuy nhiên, tôi đã không sử dụng nó, nhưng có lẽ tôi sẽ thử nó vì vô số lỗi xây dựng FP2 Android từ nguồn, được cho là một quá trình hoàn hảo. Nhưng tôi không ngạc nhiên vì tôi đã có vấn đề như xây dựng CM trên Arch Linux, sau đó tôi hiểu rằng thời gian tới tôi sẽ xây dựng trong một môi trường được khuyến nghị (Ubuntu), nhưng dường như là không đủ. Vì vậy, là ** docker ** tương lai của chúng tôi? ;) – Mixaz

3

Là một workaround cứng tôi chỉ thay thế mối liên kết được xây dựng sẵn với liên kết mềm trên /usr/bin/ld.gold. Nó được mô tả ở đây: https://bbs.archlinux.org/viewtopic.php?id=209698.

+0

Làm việc cho tôi, cảm ơn! (Tôi đang xây dựng cm12.1, Lollipop, trên Arch Linux) –

+1

không hoạt động trên tôi: ubuntu 16.04, biên dịch android 5.1.1_r6. – Ezio

21

Nó hoạt động với tôi:
trong tập tin /art/build/Android.common_build.mk, tìm hiểu:

# Host. 
ART_HOST_CLANG := false 
ifneq ($(WITHOUT_HOST_CLANG),true) 
    # By default, host builds use clang for better warnings. 
    ART_HOST_CLANG := true 
endif 

thay đổi:

# Host. 
ART_HOST_CLANG := false 
ifeq ($(WITHOUT_HOST_CLANG),false) 
    # By default, host builds use clang for better warnings. 
    ART_HOST_CLANG := true 
endif 

Nếu nó vẫn không hoạt động, hãy thử điều này trong đường dẫn gốc android của bạn: cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

+6

"cp ld.gold" hoạt động cho tôi. Cảm ơn rất nhiều. –

+0

Thay đổi Makefile là vàng! tuyệt vời tìm thấy –

+0

FWIW, tôi đã có lỗi tương tự trong khi xây dựng libcxx và libcxxabi. Sao chép không làm việc cho tôi (tôi có ".../ld không tìm thấy (có thể ld không được cài đặt), nhưng liên kết mềm (không có ý tưởng tại sao). – autra

4

Sự cố xuất phát từ sự thay đổi không tương thích về các binutils: một số sectio n đã được thêm vào. Một số nền tảng xây dựng có binutils mới và cây xây dựng android có một tuổi. Lỗi này xuất phát từ định nghĩa biến yêu cầu clang. Chúng không cho phép sử dụng chuỗi xây dựng được cung cấp. Sau đó, clang sử dụng các binutils nền tảng xây dựng gốc (ở đây/usr/bin/thay vì các bản dựng sẵn được cung cấp dưới dạng). Sau đó, sửa chữa ngụ ý áp dụng các bản vá chỉ bởi mysticTot và sau đó loại bỏ tất cả các nhị phân được tạo ra bởi toolchain (theo nơi lỗi xuất hiện này có thể thay đổi nhưng loại bỏ tất cả STATIC_LIBRARIES/SHARED_LIBRARIES/EXECUTABLES vv dirs trong cây ra nên làm điều đó). Cũng loại bỏ bộ nhớ cache ccache (vì nó lưu trữ .o) sau đó xây dựng lại. Sửa chữa được cung cấp bởi Ov3r1oad bao gồm thay thế các chuỗi công cụ dựng sẵn ld bởi ld bản địa không phải là một giải pháp, chỉ là một cách giải quyết và có thể nguy hiểm (trộn số phần là không tốt). Hy vọng nó sẽ giúp ích.

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