web-dev-qa-db-fra.com

Construction Android à partir des sources: relocalisation non prise en charge 43

Lorsque je compile Android 5.1.1, j'obtiens des dizaines d'erreurs comme ceci:

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

et le processus de création échoue finalement:

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

J'ai essayé de créer des sources avec et sans clang, et avec différentes versions de clang. Mais sur les branches plus récentes, le clang est une exigence et make ne démarre pas sans lui.

Qu'est-ce qui ne va pas?

27
Christian Rädel

Il faut appliquer ce patch pour que les choses fonctionnent https://Android-review.googlesource.com/#/c/223100/

Ouvrir build/core/clang/Host_x86_common.mk fichier dans votre Android avec un éditeur ajoutez ces lignes, comme mentionné dans ce lien

Pour Android Lollipop ou toute version antérieure, assurez-vous de conserver -no-integrated-as lors de l'application de ce patch. Assurez-vous que les suites de lignes sont correctes (\ à la fin de chaque ligne sauf la dernière ligne).

Mais, -no-integrated-as est supprimé dans Marshmallow.

24
mystictot

Cela fonctionne pour moi:
dans le fichier /art/build/Android.common_build.mk, découvrez:

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

changer en:

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

Si cela ne fonctionne toujours pas, essayez ceci dans votre Android: cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/Host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

24
Gracker

Les problèmes proviennent d'un changement incompatible dans binutils: une section a été ajoutée. Certaines plates-formes de construction ont les nouveaux binutils et Android en a un ancien. Le bogue vient de la définition des variables d'invocation de clang. Cela ne dit pas à clang d'utiliser la chaîne de construction fournie. Ensuite, clang utilise le binutils de la plateforme de construction native (ici/usr/bin/as au lieu des préconstructions fournies comme). Ensuite, le correctif implique l'application du correctif pointé par mysticTot, puis la suppression de tous les binaires produits par la chaîne d'outils (selon l'endroit où l'erreur apparaît, cela pourrait changer mais supprimer tous les répertoires STATIC_LIBRARIES/SHARED_LIBRARIES/EXECUTABLES, etc. dans l'arborescence doivent le faire.) Supprimez également le cache ccache (car il stocke .o) puis reconstruisez. , juste une solution de contournement et pourrait être dangereux (mélanger le numéro de section n'est pas bon). J'espère que cela vous aidera.

4
Rémi Cohen-Scali

Pour contourner ce problème, je viens de remplacer l'éditeur de liens prédéfini par un lien logiciel sur /usr/bin/ld.gold. Il a décrit ici: https://bbs.archlinux.org/viewtopic.php?id=209698 .

3
Ov3r1oad

Construisez-vous sur Arch Linux? J'ai le même problème depuis aujourd'hui. Mes versions précédentes remontaient à 3 jours et étaient toutes très bien. Aujourd'hui, tout échoue.

Je vois que l'administrateur a mis à jour certains packages il y a 2 jours, en particulier ceux-ci

[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 pourrait être le coupable? ( https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808206 )

voir également https://groups.google.com/d/msg/Android-x86/U1XpL0tUpqw/y4W3wRCdJgAJ ...

2
Alexandre Dumont