Installing Magick++

General

In order to compile Magick++ you must have access to a standard C++ implementation and have ImageMagick installed (ftp://ftp.wizards.dupont.com/pub/ImageMagick/). Magick++ is co-packaged as a subdirectory of ImageMagick as of ImageMagick version 4.2.2 and later. The author uses the egcs 1.1.2 version of GNU C++ which is available under UNIX and under the Cygwin UNIX-emulation environment for Windows. Standards compliant commercial C++ compilers should also work fine. Most modern C++ compilers for PCs should also work (project files are provided for Microsoft Visual C++ 6.0).

The compiler must support the following recent C++ standard features:

I have personally verified that Magick++ compiles and runs using the following compiler/platform combinations:
 
Tested Configurations
Operating System
Architecture
Compiler
Solaris 2.6 SPARC egcs 1.1.1
Solaris 2.6 SPARC egcs 1.1.2
FreeBSD 2.2.7 Intel Pentium II egcs 1.1.2
Windows NT 4.0 SP3 Intel Pentium II Visual C++ 6.0 Standard Edition

User's of Magick++ have reported that the following configurations appear to work with Magick++:
 
Other Working Configurations
Operating System
Architecture
Compiler
Reported By
Red Hat Linux 6.0 i386 egcs 1.1.2 Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
Red Hat Linux 5.2 Alpha egcs 1.1.2 Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
SGI IRIX MIPS IRIX C++ 7.2.1.2m Albert Chin-A-Young <china@thewrittenword.com>
SGI IRIX MIPS IRIX C++ 7.2.1.3m Albert Chin-A-Young <china@thewrittenword.com>

Please let me know if you have successfully built and executed Magick++ using a different configuration so that I can add to the table of verified configurations.


UNIX/Linux

Building From Source

To install the package under Unix, installation should be similar to

./configure [ --prefix=/prefix ]
make
make install

The configure script uses the compiler/linker flags it obtains from the installed 'Magick-config' script when performing the build. This means that ImageMagick must be installed before Magick++ is configured. The library is currently named similar to 'libMagick++.a' and is installed under prefix/lib while the headers are installed with Magick++.h being installed in prefix/include and the remaining headers in prefix/include/Magick++.

While it is currently possible to select building a shared Magick++ library (using the configure option --enable-shared), the resulting library may not be fully functional (exceptions fail to work) because libtool does not yet properly initialize static constructors when creating C++ shared libraries on most systems. A known workaround when using GNU C++ is to cd into the 'lib' subdirectory and execute an incantation similar to "c++ -shared -o .libs/libMagick++.so.0.0.0 *.lo -L/usr/local/lib -L/usr/openwin/lib -lMagick -ljbig -ldf -ltiff -lttf -ljpeg -lpng -ldpstk -ldps -lXext -lXt -lX11 -lsocket -lnsl -lbz2 -lz -lm -lc". The exact incantation to use is derived from the one that libtool itself used. Obviously this is not for the faint of heart. If you plan to write many programs with Magick++, this effort may be worth it since it makes the executables much smaller.

To influence the options the configure script chooses, you may specify environment variables when running the script. For example, the command
 

CXX=CC CXXFLAGS=-O2 LIBS=-lposix ./configure


specifies additional options to the configure script.  The following table shows the available options.
 
Environment Variables That Effect Configure
Environment Variable
Description
CXX
Name of C++ compiler (e.g. 'CC -Xa') to use compiler 'CC -Xa'
CXXFLAGS
Compiler flags (e.g. '-g -O2') to compile with
CPPFLAGS
Include paths (-I/somedir) to look for header files
LDFLAGS
Library paths (-L/somedir) to look for libraries. Systems that support the notion of a library run-path may additionally require -R/somedir or '-rpath /somedir' in order to find shared libraries at run time.
LIBS
Extra libraries (-lsomelib) required to link

Installing Linux RPMs

Dr. Alexander Zimmermann maintains Linux RPMs of ImageMagick and Magick++. These may be downloaded from ftp://ftp.forwiss.uni-passau.de/pub/linux/local/ImageMagick/. This site is  mirrored periodically to the ImageMagick linux directory and from there to the many ImageMagick and Linux mirror sites. Please note that the default version of the C++ compiler delivered with the system may not be sufficient to support Magick++. Egcs 1.1.2 is strongly recommended under Linux.

Windows '9X, and Windows NT

Visual C++

To build using Visual C++, extract the contents of Magick++-version.zip (preserving sub-directories) in the ImageMagick distribution directory. This will create the directory Magick++-version containing the sub-directories 'demo', 'doc', 'lib', and 'tests'. Open the workspace file Magick++.dsw and build the project Magick++ in order to build the library. The library is output to the same directory as the ImageMagick libraries.
The available projects are:
Magick++
    the Magick++ library
attributes
    test setting image attributes
manipulate
    test manipulating images
button
    program to create a simple rectangular button with an annotation
flip
    program to invert and morph images in an existing GIF animation.
demo
    program to demonstrate the image manipulation primitives
shapes
    program to demonstrate use of the drawing primitives
Test and demonstration programs are built in the directory which contains their sources. The Magick++ library is placed in the ImageMagick/lib directory alongside the ImageMagick library.

Cygwin & EGCS

It is possible to build both ImageMagick and Magick++ under the Cygwin Unix-emulation environment for Windows NT. Obtain and install Cgywin from http://sourceware.cygnus.com/cygwin/ and update to the latest EGCS compiler from http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs.html.   X11R6.4 libraries are available from http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.4/.  To build using Cygwin and EGCS, follow the instructions for building under Unix. ImageMagick and Magick++ do not yet include support for building Windows DLLs under Cygwin so do not enable dynamic libraries when building ImageMagick.