Mod Perl – Image Magick problems
Posted in Technical on December 5th, 2012 by iyoung – Be the first to commentI came across an odd issue today, in that I had installed ImageMagick on a server as root, this was via Yum. When I ran the following command as root, I saw no errors and all was as expected:
perl -e ‘use Image::Magick;’
When I switched to the user account under which Apache runs for my Mod Perl application, the command above resulted in:
Can’t load ‘/usr/local/lib64/perl5/auto/Image/Magick/Magick.so’ for module Image::Magick: libMagickCore.so.5: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 200.
at -e line 0
Compilation failed in require.
BEGIN failed–compilation aborted.
&Image::Magick::constant not defined. The required ImageMagick libraries are not installed or not installed properly.
END failed–call queue aborted.
I used the command ‘ldd’ to check the dependencies for the aforementioned Magick.so shared library and for root I saw the correct long list, for the apache user I saw the following:
ldd /usr/local/lib64/perl5/auto/Image/Magick/Magick.so
linux-vdso.so.1 => (0x00007fffeb1ff000)
libMagickCore.so.5 => not found
libm.so.6 => /lib64/libm.so.6 (0x00007f3e3fc27000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3e3f895000)
/lib64/ld-linux-x86-64.so.2 (0x0000003955a00000)
I looked at the location for libMagickCore.so.5 in the output for root and then copied the file into /lib64/ and re-ran the ldd command above and got:
libMagickCore.so.5 => /lib64/libMagickCore.so.5 (0x00007f4b22236000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4b21fb1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4b21c1f000)
liblcms.so.1 => /usr/lib64/liblcms.so.1 (0x00007f4b219d7000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00007f4b21772000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f4b214d5000)
libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007f4b2127c000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007f4b21057000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f4b20e45000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x00007f4b20be0000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007f4b209d7000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007f4b207bb000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f4b2047c000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f4b2026a000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f4b1ff19000)
libz.so.1 => /lib64/libz.so.1 (0x00007f4b1fd03000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007f4b1faf5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4b1f8d8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4b1f6d4000)
/lib64/ld-linux-x86-64.so.2 (0x0000003955a00000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f4b1f4cf000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f4b1f2b4000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4b1f0ab000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f4b1eea8000)
After this, Image Magick loaded correctly for the apache user. An alternative to this would be to use lddconfig to add the path to the missing file for the apache user, in my case it had been placed in an odd location so wasn’t appropriate.