Soru Android'i kaynaklardan oluşturma: desteklenmeyen reloc 43


Android 5.1.1'i derlerken, bu gibi düzinelerce hata alıyorum:

...
...
...
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

ve make işlemi sonunda başarısız olur:

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

Clang ile ve clang olmadan ve clang'ın farklı versiyonlarıyla yapı kaynakları denedim. Fakat daha yeni dallarda, clang bir şarttır ve make onsuz başlamaz.

Ne yanlış olabilir?


25
2018-03-16 22:42


Menşei




Cevaplar:


Çalışanların işe yaraması için bu yama uygulanmalıdır https://android-review.googlesource.com/#/c/223100/

Açık build/core/clang/HOST_x86_common.mk bazı kaynak kod dizini ile android kaynak kod dizininizde bu satırları belirtin. bağlantı

Android Lollipop veya herhangi bir önceki sürüm için, emin olun -no-integrated-as  bu yama uygulanırken. Hat sürekliliğinin uygun olduğundan emin olun (\ son satır hariç her satırın sonunda).

Fakat, -no-integrated-as Marshmallow'da kaldırılır.


23
2018-05-27 13:42



yama için bağlantı, git kiraz-pick kullanılan ve Tamam çalışır gibi görünüyor (yapı hala devam ediyor ve düzeltmek zorunda kaldığım hatalardan sadece biriydi ... bir sonraki için bekliyor ...) - Mixaz
O zaman benim için çalıştı. - mysticTot
gerçekten çalışıyor, thx - Mixaz
@ Rémi Cohen-Scali'nin cevabına da bakınız: Açıklamaktan bahsetti. Ccache'in ve make clean inşa etmek. - Christian Rädel


Bana çalışır:
/art/build/Android.common_build.mk dosyasında, şunu bulun:

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

değişmek :

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

Hala çalışmıyorsa, android kök yolunuzda bunu deneyin: cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld


21
2018-06-20 10:58



"cp ld.gold" benim için çalışıyor. Çok teşekkürler. - Richard Chang
Makefile değişimi altındır! harika bul - Royston Pinto
FWIW, libcxx ve libcxxabi oluştururken aynı hatayı aldım. Kopyalama benim için işe yaramıyor ("/ ld bulunamadı" (belki de ld yüklü değil) var, ama yumuşak bağlantı yok (neden hiçbir fikrim yok). - autra
benim için çalışıyor! Teşekkürler. - cpplover - Slw Essencial
cp Komuta benim için başka herhangi bir karışıklık yapmak zorunda kalmadan çalıştı. Teşekkürler! - Chef Pharaoh


Sorunlar binutils'deki uyumsuz bir değişiklikten geliyor: bazı bölümler eklendi. Bazı platform inşa yeni binutils ve android yapı ağaç eski var. Hata clang çağırma değişkenleri tanımından gelir. Bunlar sağlanan yapı zincirini kullanmak için clang söylemiyor. Daha sonra clang, yerel yapı platformu binutils'ini kullanır (burada / usr / bin / yerine öntanımlılar olarak). Sonra düzeltme mysticTot tarafından işaret edilen yama uygulayarak ve toolchain tarafından üretilen tüm ikili dosyaları kaldırmayı ima eder (hatanın göründüğü yere göre değişebilir, ancak tüm STATIC_LIBRARIES / SHARED_LIBRARIES / EXECUTABLES vb. Çıkışları ağacın dışına çıkarılmalıdır). Ayrıca, ccache önbelleğini de (.o depoladığı gibi) kaldırın ve yeniden oluşturun. Yerleşik alet zincirinin (ld) yerli bilgisayar tarafından değiştirilmesiyle oluşan Ov3r1oad tarafından sağlanan düzeltme bir çözüm değildir, sadece bir geçici çözümdür ve tehlikeli olabilir (karıştırma bölümü numarası iyi değildir). Umarım yardım eder.


4
2017-09-22 12:07





Zor bir çözüm olarak, önceden oluşturulmuş bağlayıcıyı /usr/bin/ld.gold üzerindeki yumuşak bağlantıyla değiştirdim. Burada tarif edilmiştir: https://bbs.archlinux.org/viewtopic.php?id=209698 .


3
2018-03-23 09:26



Benim için çalışıyor, teşekkürler! (Arch Linux'ta cm12.1, Lollipop yapıyorum) - Alexandre Dumont
bana çalışmıyor: ubuntu 16.04, android 5.1.1_r6 derlemek. - Ezio


Arch Linux üzerinde mi çalışıyorsunuz? Bugünden beri aynı problemim var. Önceki yapılarım 3 gün önce vardı ve hepsi iyi. Bugün hepsi başarısız.

Yöneticinin 2 gün önce bazı paketleri geliştirdiğini görüyorum, özellikle bunlar

[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 suçlu olabilir? (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808206)

ayrıca bkz https://groups.google.com/d/msg/android-x86/U1XpL0tUpqw/y4W3wRCdJgAJ ...


2
2018-03-17 23:41



Bir şekilde tamir ettin mi? Yakın zamanda Arch'da Lollipop ile aynı sorunu yaşıyorum. - Ov3r1oad
Ben de bu debian bugreport'a rastladım: Bu gcc-5 ve gcc-4.9 ile olur. Aşağı indirme libc6 onu düzeltirdi. Bazı işe yaramazdan sonra binutils = 2.25.90.20151209-1 (şu anda sid'de) ile yapılan güncellemenin bunu düzelttiğini fark ettim. Yani En son libc6 ve en son binutils paketleri ile işler çalışır. Yapım sistemim bir lin linux ana bilgisayarında bir ubuntu 16.10 konteynır ve etkilenen sürümlerden birini kullanmıyor. Ancak Android build sistemi kendi linkerini kendi prebuilt dizininden alıyor (gcc 4.6, glibc 2.11). Peki: Android ile sistem genelinde oluşturulmuş araçları nasıl kullanabiliriz? - Christian Rädel
Bu fikri anladığımdan, docker'ı kullanmak, zaman oluşturma ortamı oluşturmaya yardımcı olabilir: github.com/justfortherec/fairphone2-build-env Yine de kendim kullanmadım ama muhtemelen FP2 Android'i hatasız bir işlem olması beklenen, hatasız sayıda FP2 Android'i yaratan hatalardan dolayı deneyeceğim. Ancak Arch Linux'taki bina CM gibi problemlerim olduğu için şaşırmadım, bir dahaki sefere tavsiye edilen bir ortamda (Ubuntu) inşa edeceğimi anladım, ama yeterli değil gibi görünüyor. Yani liman işçisi geleceğimiz? ;) - Mixaz