Perl XML::LibXML::* 関連のモジュールインストールメモ

Perlのモジュール XML::Lib 関連のインストールにはまったので
メモを残しておく
(ちなみにこの問題は perl 5.8.8 を別のディレクトリにインストールした際に
おきたトラブルであり、デフォルトでインストールされるperl5.8.0 で行った場合は
特に問題なくインストールされた。
)

Linux 9
perl 5.8.8
XML-Lib1.6
XML-LibXML-Common-0.13
libxml2-2.6.26

XML::Lib or XML::Lib:Common などのモジュールは
libxml2 ライブラリに依存しており このライブラリーがインストールされていないといけない。
このライブラリーのインストールは configure のオプションで特に何も指定する
ことなくインストールは問題なくできるが、デフォルトでインストールされる場所が

"/usr/local/include"

以下に libxml2 として作成される。

実はこれが、XML::Lib 関連のモジュールをインストールする際に問題となる。

それは XML::LibXML 関連の Makefile でデフォルトで指定される
ライブラリー検索パスが
cc -c -I/usr/include/libxml2 -fno-strict-aliasing -pipe
-I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2
-DVERSION=\"1.60\" -DXS_VERSION=\"1.60\" -fpic
"-I/usr/local/perl-5.8.8/lib/5.8.8/i686-linux/CORE"
-DHAVE_UTF8 -DHAVE_BLANK
LibXML.c

であるからである。
"-I/usr/local/include" が指定されているから問題ないんじゃないの?
 と思うが LibXML.c で libxml のライブラリヘッダーを参照している記述が
#include と 指定されているため必要なライブラリーが検索できない。
また、libxml の物理的な パスも /usr/local/include/libxml2/libxml である。

解決策は以下2通り

解決策1:
libxml のインストールで prefix を /usr に指定する。
/usr/include かと思うが "/include"が自動的に付与されてしまうため
/usr までを指定する。

# ./configure --prefix=/usr


解決策2:
XML::LibXML 関連のモジュールのmakeファイルを作成する際に
検索パスを libxml をインストールしたパスを指定する。

#perl Makefile.PL INC='-I/path/to/xmllib2'


どちらがいいかは、好みによるが、XML::LibXML 関連のモジュールは libxml2 のライブラリーを参照しているモジュールが多いので Makefile.PL 時にいちいちライブラリーパスを
指定するのも面倒なので "解決策1" が良いと思う。




gooリサーチモニターに登録!