I have compiled ImageMagick on my CentOS, and RMagick won't install

I installed ImageMagick through, (Using ImageMagick 6.7.3-7)

./configure --prefix=/usr && make && make install

When I try to

gem install imagemagick

I get

Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
    ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.1. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/bin/ruby

This is despite the fact that MagickWand.h is already in the system in /usr/include/ImageMagick/wand/MagickWand.h. So the question is, how do I actually get the compiler to look in there?


Had the same problem on CentOS using latest everything (as of Dec 2011), and fixed it with:

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"

in my .bashrc file to pick up MagickCore.pc, then created two symlinks:

ln -s /usr/local/include/ImageMagick/wand /usr/local/include/wand
ln -s /usr/local/include/ImageMagick/magick /usr/local/include/magick

And voila, the MagickWand.h was found, the MagickCore.pc was picked up... gem installed successfully.

I imagine another solution would be to modify the configure options set during ImageMagick installation, but I'm not enough of a sysadmin to be clear what the right option and location would be for these files. After 45 minutes of googling around, I couldn't figure where these files are supposed to live, to be automatically picked up by the gem install make system.

Cheers!

EDIT: 2014-10-01

Just did this again for CentOS 7, and the ln commands above were not needed. However, I ran into an issue where I got "Package MagickCore was not found in the pkg-config search path." on running sudo gem install rmagick.

The problem was the environment reset in /etc/sudoers. After running sudo visudo to edit the sudoers file, I added Defaults env_keep += "PKG_CONFIG_PATH" to the appropriate section, updated the secure path to include /usr/local/bin, and then installing worked like a charm.


ImageMagick will typically put MagickCore here:

/usr/local/lib/pkgconfig/MagickCore.pc

If yours isn't there, you can find it like this:

find / -name MagickCore.pc

You now know your pkgconfig path:

/usr/local/lib/pkgconfig

Set the environment when you install the gem:

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig gem install rmagick

For CentOS, I solved this issue by installing the "ImageMagick-devel" package:

yum install ImageMagick-devel


The key is in the configure output where it says "checking for wand/MagickWand.h" - clearly the ImageMagick directory is not expected in /usr/include, which means you need to either move the contents of that directory up a level or you need to install ImageMagick itself differently. Putting stuff directly in /usr is generally a bad idea for anything not provided by the system itself - if you segregate all of the things you add in /usr/local instead and leave /usr largely alone, you'll find the system much easier to administer as well since you'll be able to (long after you've forgotten about this) figure out what you added vs what came with the system.