web-dev-qa-db-fra.com

glibc: fichier elf OS ABI non valide

téléchargé et compilé glibc-2.13. quand j'essaye de lancer un exemple de programme C qui fait un malloc (). J'ai l'erreur suivante elf file OS ABI invalid

Quelqu'un peut-il s'il vous plaît passer mon pointeur utile pour résoudre ce problème.Veuillez noter que la version de mon noyau est linux-2.6.35.9

20
Kapil

Ce n'est pas la version de votre noyau qui pose problème.

Le chargeur de votre système ne prend pas en charge la nouvelle ABI Linux. Jusqu'à récemment, les fichiers binaires Linux ELF utilisaient l'ABI System V. Récemment, à l'appui de STT_GNU_IFUNC, l'ABI Linux a été ajouté. Vous devrez mettre à jour votre bibliothèque system C pour disposer d'un chargeur prenant en charge STT_GNU_IFUNC, qui reconnaîtra également les objets ELF avec le type ABI Linux.

Voir Entrée de blog de Dave Miller sur STT_GNU_IFUNC pour Sparc pour comprendre ce que fait STT_GNU_IFUNC, si cela vous intéresse.

31
mkj

Il est possible que votre glibc ait été construite avec le drapeau --enable-multiarch qui forçait à utiliser ifunc et le nouveau LINUX ABI

2
cyberzx

D'après ce que je peux dire, --enable-multiarch est le paramètre par défaut et vous devez le désactiver en définissant --enable-multiarch=no.

1
Oliver R.

Si vous mettez vos mains dans le chargeur avec un système plus récent, vous pourrez peut-être le faire fonctionner avec cela. Mais vous devrez porter le chargeur où que votre programme aille. Vous pouvez soit compiler votre programme pour utiliser ce chargeur comme expliqué ici , ou le compiler et le corriger plus tard à l'aide de patchelf, d'une manière similaire à celle mentionnée ici . J'ai pu exécuter un programme qui me donnait l'erreur OS ABI invalid sur un linux 2.6.18 (plus ancien que le vôtre) qui avait ld-2.5.so en copiant un ld-2.15.so ailleurs.

NOTE: NOT écrasez votre système ld * .so ou ld-linux. ; - /

1
msb