la “délocalisation R_X86_64_32S contre ” Erreur de couplage
Je suis en train de Lier une Bibliothèque statique à une bibliothèque partagée , j'obtiens l'erreur Suivante
/usr/bin/ld: ../../../bibliothèques/log4cplus/liblog4cplus.un(fileappender.o): relocalisation R_X86_64_32S contre "un symbole local" ne peut pas être utilisée lors de la prise d'un objet partagé; recompiler avec -fPIC ../../../bibliothèques/log4cplus/liblog4cplus.un: impossible de lire les symboles: Mauvaise valeur collect2: ld a retourné 1 code de sortie
Mais cela a fonctionné sur une machine 32 bits sans aucune erreur. J'ai essayé d'ajouter Le -fPIC
drapeaux manuellement le fichier "Makefile" qui trop ne résout pas le problème
J'ai essayé le -whole-archive
drapeau, comme l'a suggéré ici mais sans succès.
/usr/bin/ld: ../../../bibliothèques/log4cplus/liblog4cplus.un(appenderattachableimpl.o): relocalisation R_X86_64_32S contre `vtable pour log4cplus::spi::AppenderAttachable' ne peut pas être utilisée lors de la prise d'un objet partagé; recompiler avec -fPIC ../../../bibliothèques/log4cplus/liblog4cplus.un(appenderattachableimpl.o): impossible de lire les symboles: Mauvaise valeur collect2: ld a retourné 1 code de sortie
Création de liblog4cplus.un:
unzip log4cplus-1.1.0.zip
./configure --enable-static=yes --enable-threads=yes
vi Makefile
ajouté et le fPIC à CXXFLAGS et CFLAGSmake
Puis pour la Compilation de ma bibliothèque partagée:
g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl
- Pouvez-vous coller la ligne de commande complet? Il serait également bon si vous avez indiqué exactement ce que vous entendez par "Lier une Bibliothèque statique à une bibliothèque partagée". Êtes-vous générer une bibliothèque partagée d'une bibliothèque statique?
- pas vraiment ...
- Pour ceux qui demandent à l'avenir: cela arrive parfois, simplement à cause de la distribution des changements, et il peut être fixé avec un nettoyage rapide du répertoire de construction.
- Double Possible de Ce n'R_X86_64_32S et R_X86_64_64 réinstallation veux dire?
Vous devez vous connecter pour publier un commentaire.
En supposant que vous êtes la génération d'une bibliothèque partagée, la plupart probablement ce qui se passe est que la variante de
liblog4cplus.a
vous utilisez n'est pas compilé avec-fPIC
. Sous linux, vous pouvez confirmer cela par l'extraction des fichiers de l'objet à partir de la bibliothèque statique et la vérification de leurs délocalisations:Si la sortie est vide, alors la bibliothèque statique n'est pas indépendante de la position et ne peut pas être utilisé pour générer un objet partagé.
Depuis la bibliothèque statique contient le code de l'objet qui a déjà été compilé, en fournissant les -fPIC drapeau ne va pas aider.
Vous avez besoin de mettre la main sur une version de
liblog4cplus.a
compilé avec-fPIC
et l'utiliser à la place.J'ai une erreur similaire lors de l'installation du FCL qui doit CCD lib(libccd) comme ceci:
Je trouve qu'il y a deux fichiers nommés "libccd.un" :
J'ai résolu le problème en supprimant le premier fichier.
Réinstallation R_X86_64_PC32 contre undefined symbol , qui se produit généralement lorsque LDFLAGS sont fixés avec le durcissement et CFLAGS pas .
Peut-être juste une erreur d'utilisateur:
Si vous utilisez -specs=/usr/lib/rpm/redhat/redhat-durci-ld au moment de la liaison,
vous devez également utiliser -specs=/usr/lib/rpm/redhat/redhat-durci-cc1 au moment de la compilation, et que vous êtes à la compilation et la liaison dans le même temps, vous avez besoin de deux, ou de baisse de l'-specs=/usr/lib/rpm/redhat/redhat-durci-ld .
Correctifs courants :
https://bugzilla.redhat.com/show_bug.cgi?id=1304277#c3
https://github.com/rpmfusion/lxdream/blob/master/lxdream-0.9.1-implicit.patch