2009-11-17 6 views
0

Bonjour,Existe-t-il un moyen de construire une libxml2 sans relocalisation de texte sous Linux?

J'ai des difficultés avec libxml2.

J'ai essayé de construire le module Perl XML-LibXML qui fait partie de notre environnement d'exécution standard. Cependant, cette fois l'installation sur une boîte RHEL5 a échoué, parce que le processus de construction se plaignait de libxml2 manquant:

 
$> perl Makefile.PL LIB=/foo/lib/perl PREFIX=/foo INSTALLDIRS=site 
enable native perl UTF8 
running xml2-config...ok (2.7.6) 
looking for -lxml2... no 
looking for -llibxml2... no 
libxml2 not found 

Cependant, le fichier était disponible. Démarrage de la construction avec

 
perl Makefile.PL LIB=/usr/inform/target/lib/perl PREFIX=/usr/inform/target INSTALLDIRS=site 

a conduit à davantage de preuves du problème réel:

 
[...] 
Can't load 'blib/arch/auto/Conftest/Conftest.so' for module Conftest: /usr/inform/target/lib/libxml2.so.2: cannot restore segment prot after reloc: Permission denied at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230. 
at test.pl line 2 
[...] 

Après quelques recherches, je trouve que le problème semble être que libxml2.so est créé à la relocalisation du texte:

 
[[email protected]] lib$ eu-findtextrel libxml2.so.2.7.6 
the file containing the function 'get_crc_table' is not compiled with -fpic/-fPIC 
the file containing the function 'crc32' is not compiled with -fpic/-fPIC 
the file containing the function 'gzerror' is not compiled with -fpic/-fPIC 
[...] 

Ans puisque nous avons SElinux actif sur la machine cible, la liaison avec libxml.2 a échoué!

Y at-il une possibilité de créer correctement libxml2, ou dois-je demander à l'administrateur de tordre SElinux pour permettre les délocalisations?

Je ne peux vraiment pas croire que je suis le seul à avoir ce problème sous Linux avec SElinux actif. Qu'est-ce que je rate?

Toute aide appréciée!

Cordialement, Stefan

Répondre

1

Je viens de trouver une explication possible:

Au cours de la construction de libxml2 le drapeau du compilateur -fPIC est en effet utilisé, de sorte que le code est créé indépendant de position, MAIS:

Lors de la création de la bibliothèque partagée , la libz statique est liée à cela. Est-ce la source de mon problème? Que l'inclusion d'une lib statique dans un exécutable partagé ternie la bibliothèque en introduisant un code non-relocatable?

Le fait que les symboles de l'UE-findtextrel devrait déjà me ont fait dans cette direction, depuis crc32, get_crc_table, etc. ressembler à un code de cryptage centré ...

+1

Oui! Le fait que je n'ai eu qu'une libz statique a causé tout mon tracas. Une fois qu'une libz.so dynamique était disponible, le problème était parti! :-) – struppi

1

La façon la plus simple est d'avoir votre administrateur yum install libxml2-devel ou même yum install perl-XML-LibXML. Autrement, voyez si vous pouvez ajouter -fPIC au CFLAGS dans le Makefile.PL.

Je suppose que vous êtes sur x86 32 bits, toute autre architecture ne fonctionnerait pas sans -fPIC.

+0

Comme je l'ai compris le déplacement -fPIC doit aller le Makefile de libxml2, ou ai-je tort ici? – struppi

+0

Oui, ou vous pouvez essayer de faire 'export CFLAGS = -fPIC' en premier, bien que cela puisse effacer les CFLAGS importants existants. –

Questions connexes