0

こんにちは、

libxml2 に問題があります。

標準ランタイム環境の一部である Perl モジュール XML-LibXML を構築しようとしました。ただし、ビルド プロセスで libxml2 が見つからないというエラーが表示されたため、今回は RHEL5 ボックスへのインストールに失敗しました。

$> perl Makefile.PL LIB=/foo/lib/perl PREFIX=/foo INSTALLDIRS=サイト
ネイティブ perl UTF8 を有効にする
xml2-config を実行しています...ok (2.7.6)
-lxml2 を探しています... いいえ
-llibxml2 を探しています... いいえ
libxml2 が見つかりません

ただし、ファイルは使用可能でした。でビルドを開始する

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

実際の問題のより多くの証拠につながりました:

[...]
モジュール Conftest の 'blib/arch/auto/Conftest/Conftest.so' を読み込めません: /usr/inform/target/lib/libxml2.so.2: 再配置後にセグメント prot を復元できません: /usr/lib で許可が拒否されました/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm 230 行目。
 test.pl 2 行目
[...]

いくつかの調査の後、問題libxml2.soはテキストの再配置で作成されたように見えることがわかりました。

[tess91@INF-AW] lib$ eu-findtextrel libxml2.so.2.7.6
関数「get_crc_table」を含むファイルが -fpic/-fPIC でコンパイルされていません
関数 'crc32' を含むファイルが -fpic/-fPIC でコンパイルされていません
関数 'gzerror' を含むファイルが -fpic/-fPIC でコンパイルされていません
[...]

ターゲット マシンで SElinux がアクティブになっているため、libxml.2 へのリンクに失敗しました。

適切に作成する可能性はありますかlibxml2、または管理者に SElinux をひねって再配置を許可するよう依頼する必要がありますか?

SElinuxがアクティブなLinuxでこの問題を抱えているのは、私が古い人だとは本当に信じられません。私は何が欠けていますか?

どんな助けでも感謝します!

よろしく、ステファン

4

2 に答える 2

1

最も簡単な方法は、管理者yum install libxml2-develまたはyum install perl-XML-LibXML. -fPICそれ以外の場合は、 で CFLAGS に追加できるかどうかを確認してくださいMakefile.PL

32 ビットの x86 を使用していると仮定すると、他のアーキテクチャは-fPIC.

于 2009-11-17T16:17:53.573 に答える
1

考えられる説明を見つけました:

libxml2 のビルド中にコンパイラ フラグ-fPICが実際に使用されるため、コードは位置に依存せずに作成されますが、次のようになります。

共有ライブラリを作成すると、静的 libz がリンクされます。それが私の問題の原因ですか?共有実行可能ファイルに静的ライブラリを含めると、再配置不可能なコードが導入されてライブラリが汚染されますか?

、などは暗号中心のコードのように見えるのでcrc32、シンボル eu-findtextrel がすでにその方向を示しているはずであるという事実...get_crc_table

于 2009-11-18T08:40:04.763 に答える