Image::Magick(PerlMagick)でpngファイルが読み込めないエラー
ついでにOpenMPとXを無効にしときます。
./configure --disable-openmp --without-x
そしてPerlスクリプトを実行!・・・今度は別のエラーが!
Can't load '/home/hoge/perl5/perlbrew/perls/perl-5.16.1/lib/site_perl/5.16.1/x86_64-linux/auto/Image/Magick/Magick.so'
for module Image::Magick: libpng15.so.15: 共有オブジェクトファイルを開けません:
そのようなファイルやディレクトリはありません
at /home/hoge/perl5/perlbrew/perls/perl-5.16.1/lib/5.16.1/x86_64-linux/DynaLoader.pm line 190.
PerlMagickのディレクトリに入ってmake testしてみたら同じエラーでこけました。libとか.soファイル関係って、何か苦手なんですよね。
シェアードオブジェクトか何とかlddとかldconfigが何とかのアレなんでしょうけど。
自分でC言語を書いて.soファイルを作って使ってみるまでは、永遠に苦手状態から抜け出せないのかもしれません。
さて、こちらのサイトにヒントがありました。
http://cooldaemon.tumblr.com/post/59115759/centos-imagemagick-source-perlmagick
さっそくlddで調べてみました。
$ ldd /home/hoge/perl5/perlrew/perls/perl-5.16.1/lib/site_perl/5.16.1/x86_64-linux/auto/Image/Magick/Magick.so
linux-vdso.so.1 => (0x00007fff2a898000)
libMagickCore.so.5 => /home/hoge/src/ImageMagick-6.7.9-2/PerlMagick/../magick/.libs/libMagickCore.so.5 (0x00007f230d9cf000)
libm.so.6 => /lib64/libm.so.6 (0x00007f230d743000)
libc.so.6 => /lib64/libc.so.6 (0x00007f230d3b0000)
liblcms.so.1 => /usr/lib64/liblcms.so.1 (0x00007f230d177000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00007f230cf12000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f230cc75000)
libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007f230ca1c000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007f230c7f7000)
libpng15.so.15 => not found
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f230c5e5000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x00007f230c37f000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007f230c177000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007f230bf5b000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f230bc1b000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f230ba0a000)
libz.so.1 => /lib64/libz.so.1 (0x00007f230b7f4000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007f230b5e6000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f230b3c9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f230b1c5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f230e29a000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f230afc0000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f230ada5000)
librt.so.1 => /lib64/librt.so.1 (0x00007f230ab9c000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f230a999000)
libpng15.so.15 => not foundとなっているのでこれが怪しそうです。
いわゆる「ライブラリのパスが通ってない」状態でしょうか。
ln -s /usr/lib/libpng15.so.15 /usr/lib64
としてみたらビンゴ!見事に動きました!ここだけシムリンク貼るのも気持ち悪いので、
/etc/ld.so.conf.d/libpng.conf というファイルを作って下記行を追記。
/usr/local/lib
反映して確認します。
$ sudo ldconfig && sudo ldconfig -v | grep png
libpng15.so.15 -> libpng15.so.15.13.0
libpng.so.3 -> libpng.so.3.49.0
libpng12.so.0 -> libpng12.so.0.49.0
やった!!これで、さっきのシムリンクなしでも動きました!
参考
- http://www32.atwiki.jp/atwikimyj/tb/21.html
- http://cooldaemon.tumblr.com/post/59115759/centos-imagemagick-source-perlmagick
カテゴリ:
CentOS
ImageMagick