Есть ли способ построить libxml2 без перемещения текста в Linux? - PullRequest
0 голосов
/ 17 ноября 2009

Добрый день,

У меня проблемы с 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 создается с перемещением текста:

[tess91@INF-AW] 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
[...]

Ответ, поскольку у нас на целевом компьютере активен SElinux, соединение с libxml.2 не удалось!

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

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

Любая помощь приветствуется!

С уважением, Stefan

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Я только что нашел возможное объяснение:

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

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

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

1 голос
/ 17 ноября 2009

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

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

...