web-dev-qa-db-fra.com

Exécution des exécutables ARM (EL) sur un système ARM (HF) - Lien symbolique manquant vers le chargeur dynamique?

J'utilise une distribution Ubuntu 12.10 (ARMHF) sur un tableau de pandas. Je veux exécuter des applications compilées pour ARMEL. Cela n'a pas été possible en raison d'un emplacement de chargeur dynamique modifié ( https://wiki.linaro.org/OfficeofCTO/HardFloat/LinkerPathCallApr2012 )

J'ai réussi en créant le lien symbolique suivant /lib/ld-linux.so.3 -> /lib/ld-linuxarmhf.so.3

Existe-t-il un moyen d'installer un package de portabilité à la place? Y a-t-il une raison pour que cela ne soit pas fait par la distribution?

Merci d'avance

5
Uhli

L'éditeur de liens dynamique est cuit au moment de la compilation. pour voir quel éditeur de liens dynamique est utilisé readelf -l /usr/bin/foo | grep Request

Le seul moyen de changer cela consiste à ajuster les fichiers de spécifications gcc. Voir gcc -dumpspecs | grep ld-linux. Ou en passant l'indicateur --dynamic-linker à l'éditeur de liens au moment de la compilation, avec quelque chose comme gcc -Wl,--dynamic-linker,/lib/ld-linux.so.3 foo.c

Cependant, rien de tout cela n’est nécessaire si la chaîne d’outils est correctement configurée, et vous ne devriez vraiment pas vous tracasser, sauf si vous avez vraiment une raison de le faire.

En bref, votre solution est probablement la meilleure. Cependant, j'essaierais de trouver le paquet armhf et de l'utiliser, si vous le pouvez, ou de le reconstruire.

1
strings

Peut-être n’existe-t-il pas un tel package de compatibilité (afin d’exécuter des binaires armhf tiers plus anciens dans l’attente de /lib/ld-linux.so.3 au lieu du nouveau standard, convenu /lib/ld-linuxarmhf.so.3, non?), Car ce package ( s’il est installé) donnerait une "fausse promesse" convenant à tous les fichiers binaires d’armel. Mais l'éditeur de liens dynamique armhf doit rompre les fichiers binaires d'armel car les ABI sont incompatibles, si je comprends bien. (Dans ce cas, la bonne solution serait d'encapsuler les quelques fichiers binaires armhf spéciaux non standard afin que l'emplacement attendu de l'éditeur de liens dynamique soit adapté à votre système. Ou réécrire cette valeur dans les fichiers binaires. Si cela est possible. Cela ne posera alors aucun problème si vous essayez d’exécuter de vrais fichiers binaires Armel.)

D'autre part, si vous voulez exécuter de véritables binaires Armel sur un système armhf, vous devez simplement choisir "multiarch" (et utilisez donc un véritable éditeur de liens dynamique armel, au lieu de votre lien symbolique!) : installez les conditions préalables d’armel pour vos fichiers binaires armel. Parmi les conditions préalables, libc6:armel ou similaire (corrigez le nom de pkg si je me trompe, s'il vous plaît) inclurait certainement le /lib/ld-linux.so.3 nécessaire.

(En ce qui concerne l'incompatibilité des ABI: comme je pourrais le comprendre, armhf permet de passer directement les arguments en virgule flottante dans des registres à virgule flottante, alors qu'en armel, ils sont passés en registres entiers. Cette indirection ajoute un coût supplémentaire pour ARM qui supporte la virgule flottante, c’est pourquoi armhf est préférable pour les armements modernes.)