GNU/Linux >> Tutoriels Linux >  >> Linux

relocalisation R_X86_64_32S contre l'erreur de liaison

En supposant que vous générez une bibliothèque partagée, ce qui se passe probablement est que la variante de liblog4cplus.a que vous utilisez n'a pas été compilé avec -fPIC . Sous Linux, vous pouvez le confirmer en extrayant les fichiers objets de la bibliothèque statique et en vérifiant leurs relocalisations :

ar -x liblog4cplus.a  
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'

Si la sortie est vide, la bibliothèque statique n'est pas indépendante de la position et ne peut pas être utilisée pour générer un objet partagé.

Étant donné que la bibliothèque statique contient du code objet qui a déjà été compilé, fournir l'indicateur -fPIC n'aidera pas.

Vous devez vous procurer une version de liblog4cplus.a compilé avec -fPIC et utilisez celui-là à la place.


Ajouter -fPIC à la fin de CMAKE_CXX_FLAGS et CMAKE_C_FLAG

Exemple :

set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )

Cela a résolu mon problème.


Linux
  1. Erreur Wi-Fi Wpa_supplicant ?

  2. Liaison avec une ancienne version de libc pour fournir une plus grande couverture des applications

  3. Liaison avec une version de symbole plus ancienne dans un fichier .so

  4. Lier une bibliothèque partagée avec une autre bibliothèque partagée sous Linux

  5. erreur fatale arm-linux-gnu-gcc :stdio.h :aucun fichier ou répertoire de ce type

Qu'est-ce que :-!! en code C ?

erreur de configuration :impossible de créer un lien avec boost_system

Impossible de trouver l'erreur de bibliothèque libcrypto

Qu'est-ce qu'un fichier .so.2 ?

Comment fonctionne la liaison dynamique, son utilisation et comment et pourquoi créer une dylib

Échec de l'installation d'extundelete-0.2.0 sur CentOS 5.6, erreur :impossible de trouver la bibliothèque ext2fs