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:

  1. unzip log4cplus-1.1.0.zip
  2. ./configure --enable-static=yes --enable-threads=yes
  3. vi Makefile ajouté et le fPIC à CXXFLAGS et CFLAGS
  4. make

Puis pour la Compilation de ma bibliothèque partagée:

  1. g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
  2. 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?
InformationsquelleAutor Thiyagarajan | 2013-11-04