60 votes

Que signifie la relocalisation R_X86_64_32S et R_X86_64_64 ?

J'ai obtenu l'erreur suivante lorsque j'ai essayé de compiler une application C dans FreeBSD 64 bits :

la relocalisation R_X86_64_32S ne peut pas être utilisée lors de la création d'un objet partagé ; recompiler avec -fPIC

Qu'est-ce que la R_X86_64_32S et qu'est-ce que R_X86_64_64 ?

J'ai recherché l'erreur sur Google et ses causes possibles - Ce serait formidable si quelqu'un pouvait dire ce que R_X86_64_32S signifie vraiment.

5voto

Artyom Points 17387

Cela signifie que vous avez compilé un objet partagé sans utiliser l' -fPIC comme vous le devriez :

  gcc -shared foo.c -o libfoo.so # Wrong

Vous devez appeler

  gcc -shared -fPIC foo.c -o libfoo.so # Right

Sous la plate-forme ELF (Linux), les objets partagés sont compilés avec un code indépendant de la position - un code pouvant s'exécuter à partir de n'importe quel emplacement de la mémoire, si ce drapeau n'est pas donné, le code généré dépend de la position, il n'est donc pas possible d'utiliser ce partage objet.

2voto

XavierStuvw Points 527

Dans mon cas, le problème est survenu parce que le programme à compiler s'attendait à trouver des bibliothèques partagées dans un répertoire distant, alors que seules les bibliothèques statiques correspondantes étaient là par erreur.

En fait, cette erreur de relocalisation était une erreur déguisée de fichier non trouvé.

J'ai détaillé comment je l'ai géré dans cet autre fil https://stackoverflow.com/a/42388145/5459638

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X