Hoping someone can help me out as I'm at a complete loss. I've trawled the Internet and really can't find anything more to help me.
I'm trying to compile my c++ program which uses the Magick++ library. I've installed Magick++ seemingly fine. In my current directory is located main.cpp and I'm running g++ main.cpp
. I'm getting the following error...
In file included from main.cpp:3:0:
/home/simeon/ImageMagick-6.8.9-0/Magick++/lib/Magick++.h:9:30: fatal error: Magick++/Include.h: No such file or directory
compilation terminated.
To try and get around the problem I'm declaring the absolute path to Magick++.h in my main.cpp so I have this which seems to be working...
#include "/home/simeon/ImageMagick-6.8.9-0/Magick++/lib/Magick++.h"
The error occurs on line 9 in Magick++.h (which it's finding due to me absolute path) which looks like this...
#include <Magick++/Include.h>
This is where I'm confused because this file does exist in the place it says it is. If I run
cat /home/simeon/ImageMagick-6.8.9-0/Magick++/lib/Magick++/Include.h
then the file opens without problem and shows its contents.
Does anyone have any suggestions as to what's going on please? I don't understand why I need to specify an absolute path at all and why g++ isn't finding the header files in the first place. Is there somehow I can tell g++ to look for Magick++ headers in a specific place?
Thanks in advance! Simeon
Since you are under Linux, I would think you can install the imagemagick package that comes with your installation. It's available on all flavors of Linux I know of.
Under Debian/Ubuntu it would be something like this:
sudo apt-get install libmagick++-dev
Otherwise, I personally would use cmake
to do all the setup. It's a bit of a learning curve at first, but then it automates those things for you.
It seems to me that if your command line is:
g++ main.cpp
Then you are missing a couple of -I
options. Installing the package may not require you to use the -I
option (since I use cmake
and don't really pay attention to those things... it just works for me.)
So to solve your problem, you probably need something like this:
g++ -I/home/simeon/ImageMagick-6.8.9-0/Magick++/lib main.cpp
Also, if you have a single .cpp
file, you may want to use a -o myprog
command line option.
For the compile and link steps to work as expected, you may want to use the pkgconfig definitions of Magick
# compile
pkg-config --cflags /usr/lib/x86_64-linux-gnu/pkgconfig/ImageMagick++.pc
# link
pkg-config --libs /usr/lib/x86_64-linux-gnu/pkgconfig/ImageMagick++.pc
These commands are actually what cmake
would try to use to determine the compile time and link time additional flags.
ImageMagick ships with a configuration utility that should give you the correct path. For Magick++, it's simply Magick++-config
(see section Usage in Magick++ docs.)
IM_CXXFLAGS=$(Magick++-config --cxxflags)
IM_LDFLAGS=$(Magick++-config --ldflags)
g++ $IM_CXXFLAGS $IM_LDFLAGS main.cpp
You will need to use the system's include statement (<>
), and keep it simple by including the parent header.
#include <Magick++.h>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With