Image::Magick(PerlMagick)がインストールできない
ImageMagickをソースからインストールした環境でImage::Magick(PerlMagick)がうまくインストールできない現象が発生したので、備忘録としてメモ。というのも某先輩から「また将来、エラーになったときにgoogleで検索、そこで解決方法がヒットするようにお前のブログに書いておけ」というお達しがあったという噂もあったり、なかったり。
インストールしたImageMagickのバージョンは6.8.1-9(ImageMagick-6.8.1-9.tar.gz)。configureのオプションは特につけてないです。
次にcpanでImage::Magickをインストール。
$ cpan -i Image::Magick
…略…
Magick.xs:60:31: error: magick/MagickCore.h: そのようなファイルやディレクトリはありません
Magick.xs:167: error: expected specifier-qualifier-list before ‘MagickRealType’
Magick.xs:188: error: expected specifier-qualifier-list before ‘ImageInfo’
…略…
Magick.xs:2382: 警告: implicit declaration of function ‘NewSplayTree’
Magick.xs:2383: 警告: statement with no effect
make: *** [Magick.o] エラー 1
JCRISTY/PerlMagick-6.77.tar.gz
/usr/bin/make -- NOT OK
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible
というわけでエラー、「MagickCore.h」が見つからないらしい。ここでcpanで入れるのを諦めて、直接PerlMagickを公式サイトからゲットしてインストールする事に。
$ tar zxvf PerlMagick-6.77.tar.gz
$ cd ./PerlMagick-6.77
$ perl Makefile.PL INC="-I/usr/local/include/ImageMagick" LIBS="-L/usr/local/lib"
Checking if your kit is complete...
Looks good
Writing Makefile for Image::Magick
Writing MYMETA.yml and MYMETA.json
Makefileを作るときにINC等を指定してMagickCore.hを見つけられるようにしてあげる。エラーにならずにMakefile作れたみたいなので続けてmake開始。
$ make
cp Magick.pm blib/lib/Image/Magick.pm
AutoSplitting blib/lib/Image/Magick.pm (blib/lib/auto/Image/Magick)
/usr/bin/perl /usr/share/perl5/ExtUtils/xsubpp -typemap /usr/share/perl5/ExtUtils/typemap -typemap typemap Magick.xs > Magick.xsc && mv Magick.xsc Magick.c
gcc -c -I/usr/local/include/ImageMagick -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fopenmp -g -O2 -Wall -pthread -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION=\"6.77\" -DXS_VERSION=\"6.77\" -fPIC "-I/usr/lib64/perl5/CORE" -D_LARGE_FILES=1 -DHAVE_CONFIG_H Magick.c
/usr/local/include/ImageMagick/magick/MagickCore.h:29 から include されたファイル中,
Magick.xs:60 から:
/usr/local/include/ImageMagick/magick/magick-config.h:29:3: 警告: #warning "you should set MAGICKCORE_QUANTUM_DEPTH to sensible default set it to configure time default"
/usr/local/include/ImageMagick/magick/magick-config.h:30:3: 警告: #warning "this is an obsolete behavior please fix your makefile"
/usr/local/include/ImageMagick/magick/magick-config.h:52:3: 警告: #warning "you should set MAGICKCORE_HDRI_ENABLE to sensible default set it to configure time default"
/usr/local/include/ImageMagick/magick/magick-config.h:53:3: 警告: #warning "this is an obsolete behavior please fix yours makefile"
Running Mkbootstrap for Image::Magick ()
chmod 644 Magick.bs
rm -f blib/arch/auto/Image/Magick/Magick.so
gcc -L../magick/.libs -lMagickCore -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -L/usr/lib Magick.o -o blib/arch/auto/Image/Magick/Magick.so \
\
/usr/bin/ld: cannot find -lMagickCore
collect2: ld はステータス 1 で終了しました
make: *** [blib/arch/auto/Image/Magick/Magick.so] エラー 1
はい、またエラー。今度はMagickCoreを見つけられない様子。ImageMagickはちゃんとインストールしてるはずなのになと、/usr/local/lib以下を調べる。
$ ls -1 /usr/local/lib/ | grep libMagickCore
libMagickCore-Q16.a
libMagickCore-Q16.la
libMagickCore-Q16.so
libMagickCore-Q16.so.7
libMagickCore-Q16.so.7.0.0
MagickCoreはあるが、"-Q16"という文字列がついている。何ぞコレ。調べるとQ16はビット深度(bit depth)でデフォルトが16とのこと。「昔からこんなんだったっけ?」と思いつつ、おもむろにシンボリックリンク作戦に出る。
rootになって、
# cd /usr/local/lib
# ln -s libMagickCore-Q16.so.7.0.0 libMagickCore.so
という感じでシンボリックリンクを作る。インストールに再チャレンジ。
$ make clean
$ perl Makefile.PL INC="-I/usr/local/include/ImageMagick" LIBS="-L/usr/local/lib"
$ make
$ su
# make install
# exit
$
いけた。コンパイル通ってインストールまでいけた。あとperl側で簡単な確認。
$ perl -MImage::Magick -e 'print $Image::Magick::VERSION'
6.77
なんかバージョンも表示されたしなんかいけそうな気がする。で、この状態で動作確認は某先輩に丸投げしているという。もしこの方法でうまく動かなかったらまたここに追記します。
作成日:2013/01/21 02:35:42