2009-11-17 3 views
0

Добрый день,Есть ли способ создать libxml2 без текстовых перемещений в Linux?

У меня возникли трудности с libxml2.

Я попытался построить модуль Perl XML-LibXML, который является частью нашей стандартной среды выполнения. Тем не менее, на этот раз установка на коробке RHEL5 не удалось, так как процесс сборки жаловался отсутствующего libxml2:

 
$> 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 

Однако файл был доступен. Запуск сборки с

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

привело к более доказательств реальной проблемы:

 
[...] 
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 
[...] 

После некоторых исследований я обнаружил, что проблема, как представляется, что libxml2.so создается с текстом перемещения:

 
[[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, так как у нас есть SElinux активная на целевой машине, ссылка на libxml.2 не удалась!

Возможно ли создать libxml2, или мне нужно попросить администратора скрутить SElinux, чтобы разрешить перемещение?

Я действительно не могу поверить, что я один из тех, у кого есть эта проблема в Linux с активным SElinux. Что мне не хватает?

Любая помощь с пониманием!

С уважением, Стефан

ответ

1

я нашел возможное объяснение:

Во время сборки libxml2 флаг компилятора -fPIC действительно используется, поэтому код создается положение независим, НО:

При создании общей библиотеки , статический libz связан с ним. Это источник моей проблемы? Что, включая статический lib в общем исполняемом файле, замалчивает библиотеку, введя неперемещаемый код?

Тот факт, что символы ес-findtextrel должны уже указал мне в этом направлении, так как crc32, get_crc_table и т.д. выглядят как шифрование по центру кода ...

+1

Да! Тот факт, что у меня был только статический libz, вызвал все мои хлопоты. Как только динамический libz.so был доступен, проблема исчезла! :-) – struppi

1

Самый простой способ, чтобы ваш администратор yum install libxml2-devel или даже yum install perl-XML-LibXML. В противном случае посмотрите, можете ли вы добавить -fPIC в CFLAGS в Makefile.PL.

Предполагаю, что вы находитесь на 32-разрядной x86, любая другая архитектура не будет работать без -fPIC.

+0

Как я понял перемещение -fPIC должен пойти Makefile из libxml2, или я здесь не прав? – struppi

+0

Да, или вы можете попробовать сначала экспортировать CFLAGS = -fPIC, хотя это может уничтожить существующие важные CFLAGS. –

Смежные вопросы