Comment puis-je définir ccshared=-fPIC lors de l'exécution ./configurer?
Je suis en train de construire la version 2.6 de Python pour QGIS sur RHEL 5.
Lors de la réalisation de QGIS, j'obtiens l'erreur suivante:
Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2
Ce que je figure de cette erreur est que j'ai besoin de construire la version 2.6 de Python avec certains drapeau, -fPIC
.
OK, donc je l'ai trouvé dans le configure.in
fichier mais il vérifie plusieurs conditions et sur la base de ces conditions, il attribue -fPIC
à la CCSHARED
drapeau.
Ce que j'ai fait était qu'après que toutes les conditions ont été vérifiées, j'ai ajouté la ligne suivante à délibérément CCSHARED
comme -fPIC
.
CCSHARED="-fPIC";
Mais il ne fonctionne pas..
Comment spécifier lors de la configuration que je veux mettre CCSHARED
comme -fPIC
?
OriginalL'auteur ashishsony | 2009-03-10
Vous devez vous connecter pour publier un commentaire.
Run configurer avec
--enable-shared
. Puis-fPIC
sera inclus dans le cadre du partage des drapeaux../configure --enable-shared
, cela a provoqué de nombreuses et importantes Python modules intégrés à l'échec de la compilation (je suis en train de compiler Python 2.7.3 pour une version 64 bits de Ubuntu 11.04). Au lieu d'ajouter--enable-shared
, j'ai dû modifierMakefile
et ajouter-fPIC
aprèsCC=
comme par ashishsony la réponse ci-dessous.Mes modules n'a pas de construire, mais c'est parce que j'ai eu la mauvaise libpython2.7a déjà installé dans /usr/local/lib! Supprimer et rediffusé
make
, et tout a été heureux.J'ai été l'installation de scientifiques linux 6.4 utilisation de l'environnement-modules. J'ai dû supprimer précédente installaiton
pour moi la course
./configure --enable-shared --with-pic
travailléVous devez ajouter CXXFLAGS et CFLAGS (comme par @Crc de la solution ci-dessous). Sinon, vous obtenez la même erreur à propos de -fPIC (au moins avec Python 2.7.13). Aussi,
--with-pic
n'est pas reconnu. Voici ce qui a fonctionné pour moi pour Python 2.7.13:./configure CFLAGS=-fPIC CXXFLAGS=-fPIC --enable-shared
OriginalL'auteur A. Coady
J'ai eu de travail en ajoutant
-fPIC
aprèsCC= gcc -pthread
,j'.e
CC= gcc -pthread -fPIC
dans le Makefile../configure --enable-shared
entraîné une erreur:'.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
. J'ai dû modifier le fichier Makefile et ajoutez -fPIC à la variable, comme décrit. Cela fixe, mais il me bugs que j'ai eu à le faire, mais la compilation sur d'autres machines avec Mac et Ubuntu n'a jamais eu ce problème, je vais examiner de plus si j'ai le temps.OriginalL'auteur ashishsony
La suite travaillé pour moi quand je suis tombé sur cette erreur:
super! veuillez hausse de montrer les futurs téléspectateurs que cette réponse pourrait travailler pour eux.
OriginalL'auteur Crt
./configure --help
, éventuellement, de la tuyauterie de grep PIC, pour voir si il ya une option pour activer cetteSi aucun de ces travaux, vous avez besoin de lire la configuration de code et de comprendre les conditions de tests pour mieux.
OriginalL'auteur unwind
Comme indiqué ailleurs, l'exécution de configure avec l'option --enable-shared devrait provoquer -fPIC pour être inclus dans les options du compilateur. Cependant, vous pouvez toujours voir l' "ne pouvait pas lire les symboles" d'erreur si vous tentez de faire un parallèle construire en utilisant, par exemple, le "faire-j8'. J'ai eu ce même message d'erreur sur RHEL 5.2 et il ne s'en alla quand j'ai enlevé le '-j8 " de mon make invocation...
Je trouve que si vous construisez python premier sans le configurer pour
--enable-shared
, en essayant de le faire par la suite causer epic fail comme la lib statique sera dans le chemin, mais le makefile est clairement à la recherche de quelque chose d'autreOriginalL'auteur evadeflow
N'est-ce pas
CCFLAGS
? (N'ont pas été de ce côté du monde pour un temps.)OriginalL'auteur leppie
reconstruit le openssl avec
./config --prefix=/logiciel/bea/openssl/100c --openssldir=/logiciel/bea/openssl/100c/ssl shared-fPIC
et puis aussi il la force de travail. il a donné /usr/bin/ld: les liens échoué.
La nous avons modifié le lien de la partie dans le fichier
auparavant, il était gcc-Wall -shared-o pwutil.donc asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt.o /logiciel/bea/openssl/1.0.0 c/lib/libcrypto.un
nous avons changé libcrypto.un de libcrypto.ainsi, après la reconstruction, avec partage de l'option et - fPIC
gcc-Wall -shared-o pwutil.donc asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt.o /logiciel/bea/openssl/1.0.0 c/lib/libcrypto.donc
et il a travaillé
OriginalL'auteur bhuvana
Suivantes a une exemple de passage fPIC pour configurer
OriginalL'auteur joshjdevl