PerlMagick (Image::Magick) のインストール (Debian squeeze + perlbrew 環境)
ImageMagick の Perl 用インターフェイスである PerlMagick (Image::Magick モジュール) のインストールがなかなかうまくいかなかったので、メモしておきます。
背景
最初は apt-get で ImageMagick 関連の必要そうなパッケージをインストールして、cpanm で PerlMagick (Image::Magick) をインストールしようかとしました。
$ cpanm Image::Magick
しかしなぜかうまく行かず。 Web 上を調べると同様のことをしようとして失敗している人が結構居て、PerlMagick の Makefile.PL を書き換えて ImageMagick のライブラリや include のパスを追加すればいい、というような情報もありましたが、そういうことをやってみても成功しませんでした。 PerlMagick のバージョンは ImageMagick に合わせないとダメらしいので、cpanm でインストールする PerlMagick のバージョンを指定したりもしましたが結局だめでした。
エラーメッセージを見ても何がダメなのかよくわからない、という状態。
しょうがないのでソースからインストール
多分何か足りないものがあるんだと思いますが、何が足りないのかよくわかんないので ImageMagick と PerlMagick の両方ともソースからビルドすることにしました。
ImageMagick のインストール
公式のインストールガイドは下記ページ。
最新の ImageMagick 6.7.6-5 をインストールしました。 インストールガイドに従えば特に問題なくインストールできると思います。
なお、apt-get でインストールされた ImageMagick 関連のライブラリとソースからビルドしてインストールしたものは共存できるはずですが、ややこしいので apt-get でインストールされた方はあらかじめアンインストールしておきました。
PerlMagick のインストール
公式のインストールガイドは下記ページ、またはソースディレクトリ内の README.txt を読むといいでしょう。
まず、ImageMagick のバージョンに合わせた PerlMagick (例えば ImageMagick 6.7.6 に対しては PerlMagick 6.76) のソースコードをダウンロードして、展開します。 今回の場合は、PerlMagick 6.76 をダウンロードしました。
次に、展開後の PerlMagick のディレクトリに移動して Makefile.PL のパスのところに、自分の環境に合わせた MagickCore ライブラリへのパス情報を追加 します。 インストールガイドだとそれだけでいいはずなのですが、Makefile.PL を見ると、ビルドオプションとして "-lperl" というのがついていて、libperl も必要とされている様子があります。 実際のところ libperl が必要なのかどうか疑問ですが、libperl へのパスも追加することにします。 うちの環境だと、
に libperl がありますので、
をパスに追加しました。
後はガイドどおりに下記コマンドを実行することでインストール完了です。
$ perl Makefile.PL $ make $ make install
ただし、perl のインストール時に ccflags として -fPIC を指定していないと以下のようなエラーが出てしまうと思います。
$ make Skip blib/lib/Image/Magick.pm (unchanged) cc -c -I/usr/local/include/ImageMagick -I../ -I.. -pthread -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -pthread -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/graphviz -I/usr/include/freetype2 -I/usr/include/libxml2 -I"/usr/include/ImageMagick" -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fopenmp -g -O2 -Wall -pthread -O2 -DVERSION=\"6.76\" -DXS_VERSION=\"6.76\" -fpic "-I/home/nobuoka/perl5/perlbrew/perls/perl-5.8.8/lib/5.8.8/x86_64-linux/CORE" -D_LARGE_FILES=1 -DHAVE_CONFIG_H Magick.c Running Mkbootstrap for Image::Magick () chmod 644 Magick.bs rm -f blib/arch/auto/Image/Magick/Magick.so LD_RUN_PATH="/usr/local/lib" cc -L/usr/local/lib -lMagickCore -L../magick/.libs -lMagickCore -shared -L/usr/local/lib -L/usr/lib Magick.o -o blib/arch/auto/Image/Magick/Magick.so \ -L/usr/local/lib -L/home/nobuoka/perl5/perlbrew/perls/perl-5.8.8/lib/5.8.8/x86_64-linux/CORE -lMagickCore -lMagickCore -lperl -lm \ /usr/bin/ld: /home/nobuoka/perl5/perlbrew/perls/perl-5.8.8/lib/5.8.8/x86_64-linux/CORE/libperl.a(perl.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC /home/nobuoka/perl5/perlbrew/perls/perl-5.8.8/lib/5.8.8/x86_64-linux/CORE/libperl.a: could not read symbols: Bad value collect2: ld returned 1 exit status make: *** [blib/arch/auto/Image/Magick/Magick.so] エラー 1
その場合は、以下のように -fPIC オプションを指定して Perl をビルドすれば良いようです。
$ perlbrew install perl-5.8.8 -A ccflags=-fPIC
libperl っているのだろうか
結局のところ PerlMagick に libperl っているんですかね。 なくても問題ないような気がします。