zoukankan      html  css  js  c++  java
  • Compile Graphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64

    Compile Graphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64

    INTRODUCTION

    This tutorial explains how to compile several important C++ libraries under Windows 7 64 bits using MinGW 64 for 64 bits architectures:

    • Graphics Magick 1.4 and Image Magick
    • Open SSL
    • Boost 1.57
    • Botan
    • Qt 5.4 and Qt Creator 3.2.1
    • OpenCV 2.4.9

    All patches, configuration files and compilation scripts described in the document can be downloaded here: 20150202-compile.7z

    On a PC with a processor Intel(R) Core(TM) i7-2600K CPU @ 3.4GHz with 32GB of RAM and State Solid disk it takes approximately 5 hours to compile all libraries described in the document in parallel for both 32 and 64 bits architecture.

    On a laptop with a processor Intel(R) Core(TM) i7-2720QM CPU @ 2.2GHz with 8GB of RAM and State Solid disk the same process takes 9 hours.

    If you have any suggestions or corrections please do not esitate to contact me using the Contact Me form. And if you find it useful let me know too, a little thank will help me keeping it up-to-date :-)

    Toolchain MingGW

    To compile all the following code I will use Ming Builds 64bits with GCC 4.9.2, with SEH exceptions and POSIX threads. This version of GCC support all features of C++ up to version 14. 

    The toolchain is available from the following link

    http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-posix/seh/

    The file I downloaded is

    x86_64-4.9.2-release-posix-seh-rt_v3-rev1.7z

    Warning: before compiling anything on Windows I strongly advice you to disable any running Antivirus. Not only the compilation is considerably slowed down by an antivirus, but it can also causes a lot of unespected problems. As an example the configure command failing immediately after the message "Checking how to run the C preprocessor".

    Warning: you may face unexpected issues when running make commands with the -jx option, where x is the number of cores in your system. On my system this option works on most (not all) packages, but it seems to cause race conditions on Windows 8. Please consider to remove the -jx option from all make commands if you face unexpected issues during the compilation.

    SETUP THE BUILDING ENVIRONMENT

    This part of the guide is similar to the one written by Ingar Satgnu - http://ingar.satgnu.net/devenv/mingw32/index.html

    The main difference is that here there are no build32 and build64 directories and all packages are installed into separate directories. More work is required to configure compilation FLAGS and PATH but the resulting structure is more versatile for distribution of self-contained packages.

    MSYS 2 installation

    MSYS 2 is a minimalistic collection of GNU utilities, including a UNIX console, that will be used, together with MinGW, to compile all the following source code. It derives from Cygwin but it is more Windows friendly. Download the latest version from 

    http://sourceforge.net/projects/msys2/files/Base/x86_64/

    I prefer to download the tar.xz version instead of the executable because it is more versatile and reduce to the minimum Windows register pollution.

    msys2-base-x86_64-20141113.tar.xz

    This new version of MSYS 2 is the only one that works while compiling Qt 5.4 with MinGW 64: if you use the previous version, simply called MSYS, you will have issues with compiled objects file size.

    Simply extract the content of the archive into the following directory using for example the free software 7zip.

    C:Tools

    Warning: in MSYS 2 there is some sort of limitation in the lenght of environment paths: it can be any path e.g. LD_LIBRARY_PATH or LIBRARY_PATH. In this scenario any command can unexpectedly fail with a subtle error like "Bad address". I suggest to give the base directory a name shorter or equal to 5 character (e.g. "Tools"). Consider also to remove all unused path when possible.

    You should have 2 batch files sitting in C:Tools

    mingw64_shell.bat
    ​mingw32_shell.bat

    The first command opens a terminal and sets a series of environment variables to use the 64 bits compiler located in /mingw64 while the second will do the same for the 32 bits compiler located in /mingw32. Run the first one.

    The first time you start MSYS 2 you will see a lot of configuration messages. Once the console is open, type the following commands to update MSYS 2 packages and restart the console

    pacman -Sy
    pacman -Su

    Temporary files will be downloaded into the following directory and can be deleted at the end of the process

    /var/cache/pkgfile

    You will need to install few additional packages that are required later. Remember to restart MSYS 2 after the installation.

    pacman -S zip unzip tar make diffutils patch

    Should you experience some issues with the the package repository run the following commands to clean it up

    run pacman-key --init
    pacman-key --populate

    MinGW 64 installation

    It is possible to install default versions of both MinGW for 32 and 64 bits compilers running the following two commands but I personally prefer to download the version I want as it gives me more freedom to experiment (see above).

    pacman -S mingw-w64-x86_64-toolchain
    pacman -S mingw-w64-i686-toolchain

    To install the chosen version of MinGW 64 simply delete both directories /mingw32 and /mingw64 and uncompress the following file into C:Toolsmingw64

    x86_64-4.9.2-release-posix-seh-rt_v3-rev1.7z

    Once you restart MSYS 2 you can test if gcc is working with the following command

    gcc --version

    Now create the following directory

    mkdir /local64

    This will be used to compile and install libraries and tool for 64 bits specific architectures. Now create the following directories where we are installing compiled packages, additional configurations and source files. 

    mkdir /local64/{etc,dst,src,tmp} /src

    Toolchain configuration

    To compile 64 bits applications we need to create a profile.local file and save it under /local64/etc

    Be sure the file is in UNIX format, in case use Notepad++ to change it.

    
    
    alias dir='ls -la --color=auto'
    alias ls='ls --color=auto'
    
    export MINGW_HOME=/mingw64 
    export LOCAL_DIR=/local64
    export PYTHON_HOME="/opt/python"
    export PERL_HOME="/opt/perl"
    export RUBY_HOME="/opt/ruby"
    export WIN_FLEX_BISON_HOME="/opt/win_flex_bison"
    export CMAKE_HOME="/opt/cmake"
    export TMPDIR=$LOCAL_DIR/tmp
    
    # General
    export GLOBAL_SRC_DIR=/src
    export SRC_DIR=$LOCAL_DIR/src
    export DST_DIR=$LOCAL_DIR/dst
    
    # Compiler include path.
    export CPATH=""       
    
    # Linker lib path.
    export LIBRARY_PATH=""
    
    # Library (dll) execution path.
    export LD_LIBRARY_PATH=".:$MINGW_HOME/bin:/bin:/opt/bin"
    
    # Define executable path.
    export PATH=".:$MINGW_HOME/bin:/bin:/opt/bin:$RUBY_HOME/bin:
    $PERL_HOME/site/bin:$PERL_HOME/bin:
    $PYTHON_HOME:$PYTHON_HOME/Scripts:
    $CMAKE_HOME/bin:
    $WIN_FLEX_BISON_HOME"    
    
    # Makefile macros.
    export CPPFLAGS=""
    export CFLAGS=""
    export CXXFLAGS=""
    export LDFLAGS=""
    
    # Pkg Config
    export PKG_CONFIG_PATH="$LOCAL_DIR/lib/pkgconfig"
    export PKG_CONFIG=$DST_DIR/pkg-config/bin/pkg-config.exe
    
    # Configure PATH and FLAGS.
    
    APPLICATION_ARRAY=(
    "LOCAL:$LOCAL_DIR"
    "LIBICONV_PREFIX:$DST_DIR/libiconv"
    "ZLIB_PREFIX:$DST_DIR/zlib"
    "BZIP2_PREFIX:$DST_DIR/bzip2"
    "LIBTOOL_PREFIX:$DST_DIR/libtool"
    "LIBXML2_PREFIX:$DST_DIR/libxml2"
    "LIBPNG_PREFIX:$DST_DIR/libpng"
    "LIBJPEG_PREFIX:$DST_DIR/libjpeg"
    "LIBTIFF_PREFIX:$DST_DIR/libtiff"
    "FREETYPE2_PREFIX:$DST_DIR/freetype2"
    "LCMS2_PREFIX:$DST_DIR/lcms2"
    "FFTW_PREFIX:$DST_DIR/fftw"
    "BOTAN_PREFIX:$DST_DIR/botan"
    "QT_PREFIX:$DST_DIR/qt"
    "QT_CREATOR_PREFIX:$DST_DIR/qt-creator"
    "OPENSSL_PREFIX:$DST_DIR/openssl"
    "ICU_PREFIX:$DST_DIR/icu"
    "OPENCV_PREFIX:$DST_DIR/opencv"
    "LIBFFI_PREFIX:$DST_DIR/libffi"
    "PKGCONFIG_PREFIX:$DST_DIR/pkg-config"
    "GETTEXT_PREFIX:$DST_DIR/gettext"
    "GMQ8_PREFIX:$DST_DIR/gm-q8"
    "GMQ16_PREFIX:$DST_DIR/gm-q16"
    "IMQ8_PREFIX:$DST_DIR/im-q8"
    "IMQ16_PREFIX:$DST_DIR/im-q16"
    "BOOST_PREFIX:$DST_DIR/boost"
    "GLIB_PREFIX:$DST_DIR/glib"
    "CPPUNIT_PREFIX:$DST_DIR/cppunit"
    "GPERF_PREFIX:$DST_DIR/gperf"
    )
    
    for app in "${APPLICATION_ARRAY[@]}" ; do
    
        KEY=${app%%:*}
        VALUE=${app##*:}
        export "$KEY"="$VALUE"
    
        export CPATH="$CPATH:$VALUE/include"
        export LIBRARY_PATH="$LIBRARY_PATH:$VALUE/lib"
        export LD_LIBRARY_PATH="$LIBRARY_PATH -L$VALUE/lib"
        export PATH="$PATH:$VALUE/bin"
    
        export PKG_CONFIG_PATH="$VALUE/lib/pkgconfig:$PKG_CONFIG_PATH"
    
    done
    
    # Qt configuration
    
    export QMAKESPEC=$QT_PREFIX/mkspecs/win32-g++/
    export QTDIR=$QT_PREFIX
    export QT_PLUGIN_PATH=$QT_PREFIX/plugins
    export QT_PRIVATE_HEADERS=$QT_PREFIX/include
    export LANG=en_US
    
    # This is equivalent to pass --build=x86_64-w64-mingw32 to the configure script.
    export MACHTYPE=x86_64-w64-mingw32

    The array APPLICATION_ARRAY is used to build all libraries into separate directories but it can be easily updated to build all libraries into one common directory.

    We also want to load this configuration file whenever we lunch an MSYS 2 console for a 64 bits environment. To do so we modify the file /etc/profile as follows (we add also the option for 32 bits environment in case).

    ...
    
    MINGW32)
      PATH="/mingw32/bin:${MSYS2_PATH}:${PATH}"
      PKG_CONFIG_PATH="/mingw32/lib/pkgconfig"
      MANPATH="/mingw32/share/man:${MANPATH}"
      source /local32/etc/profile.local
    ;;
    
    MINGW64)
      PATH="/mingw64/bin:${MSYS2_PATH}:${PATH}"
      PKG_CONFIG_PATH="/mingw64/lib/pkgconfig"
      MANPATH="/mingw64/share/man:${MANPATH}"
      source /local64/etc/profile.local
    ;;
    
    ...

    You can always manually load a configuration running the following command

    source /local64/etc/profile.local

    Once finished restart MSYS 2 console.

    Cmake

    Cmake is the more modern counterpart to configure. Both are used to prepare source code for compiling with make. Here it will be used to compile OpenCV.

    Download the latest version of CMake for Windows cmake-3.1.1-win32-x86.zip from http://www.cmake.org/cmake/resources/software.html and unpack it under

    /opt/cmake

    As a result you should have the following structure

    /opt/cmake/bin
    /opt/cmake/doc
    /opt/cmake/man
    /opt/cmake/share

    Perl

    In order to compile Qt you need to install Perl. If you don't, the Qt configure.exe command will complain about some missing header files.

    In this guide I use Active Perl 5.20.1. You can download the 64 bit version from the following link http://www.activestate.com/activeperl and install it under

    C:Toolsoptperl

    Do no install it into "Programs Files" if you don't want to have problems with the infamous space and also do not add this path to the Windows PATH variable, because we are adding it to the configuration files inside MSYS. We do not need to install the 32 bits version of Perl because this is used to process configuration scripts and not to compile.

    Python

    To compile Botan and OpenCV you must install Python. All the tools in this page work with both version 3.3.3 and 2.7.6 with the exception of SCons. If you plan to use SCons to compile your own software then use Python 2.7.9.

    Download the installation file for Windows 7 64 bits

    python-2.7.9.amd64.msi

    from http://python.org/download/ and follow the installation process. I installed Python in

    C:Toosoptpython

    Do no install it into "Programs Files" if you don't want to have problems with the infamous space and also do not add this path to the Windows PATH variable, because we are adding it to the configuration files inside MSYS. We do not need to install the 32 bits version of Python because this is used to process configuration scripts and not to compile.

    SCons

    SCons is a software construction tool—that is, a superior alternative to the classic "Make" build tool.

    You don't need SCons to compile the source code described in this document. But if you plan to use SCons to build your own personal software, remember that it currenlty supports Python 2.7 only. Support for Python 3.3 is under development. SCons is installed directly into the Python installation directory. I tried several different approaches to install SCons using MSYS and the following is the only one that works.

    Download the file

    scons-2.3.4.tar.gz

    from http://www.scons.org into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $GLOBAL_SRC_DIR
    tar zxvf scons-2.3.4.tar.gz 
    cd scons-2.3.4 
    python setup.py bdist_wininst 
    start dist/scons-2.3.4.win-amd64.exe

    The installation software should detect Python instalation directory (from Windows regiter) and install SCons scripts directly into it. Once finished run the following commands to rename SCons Python script and test it.

    cp /opt/python/Scripts/scons.py /opt/python/Scripts/scons
    
    scons --version

    Be sure the Python Scripts directory is added to the PATH variable.

    Ruby

    To compile Qt 5.4 you need Ruby.

    Download the installation file for Windows 7 64 bits

    rubyinstaller-2.1.5-x64.exe

    from http://rubyinstaller.org and follow the installation process. I installed Python in

    C:Toolsopt
    uby

    Do no install it into "Programs Files" if you don't want to have problems with the infamous space and also do not add this path to the Windows PATH variable, because we are adding it to the configuration files inside MSYS. We do not need to install the 32 bits version of Python because this is used to process configuration scripts and not to compile.

    Once installed open a MSYS console and run the following command to be sure that the right version of Python is used

    ruby --version

    Win Flex-Bison

    You will need a version of Flex and Bison for MSYS in order to compile Qt 5.4 WebKit. Download the file

    win_flex_bison-latest.zip

    from http://sourceforge.net/projects/winflexbison/ and uncompress it under

    C:Toolsoptwin_flex_bison

    Do no install it into "Programs Files" if you don't want to have problems with the infamous space and also do not add this path to the Windows PATH variable, because we are adding it to the configuration files inside MSYS as shown later in the document.

    BUILDING THE SOURCE CODE

    To reduce the amount of disk required to build both 64 and 32 version of all libraries I decided to save all source files into the same directory

    $GLOBAL_SRC_DIR=/src

    All source files must be saved into this directory.

    Pkg-config Lite 0.28-1

    This is a package configuration tool. The original tool has a circular dependency with GLib libraries making it difficult to compile. This lite version works the same while removing this circular dependency.

    Download the file

    pkg-config-lite-0.28-1.tar.gz

    from http://sourceforge.net/projects/pkgconfiglite/files/0.28-1/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -zxf $GLOBAL_SRC_DIR/pkg-config-lite-0.28-1.tar.gz
    cd $SRC_DIR/pkg-config-lite-0.28-1
    sh configure --prefix=$PKGCONFIG_PREFIX --build $MACHTYPE
    make -j8
    make install

    The option

    -j8

    is for an 8 CPUs computer. Just use the appropriate number according to your system. Please note that this simply speeds up the compilation time but does not affect the actual result except for some highlighted packages that cannot be compiled in parallel, Qt included.

    Libiconv 1.14

    GNU libiconv is a Unicode support library. Please note that the MinGW64 Toolchain might come with a 32 bits version of libiconv, so it is better to recompile it in 64 bits anyway.

    Download the file

    libiconv-1.14.tar.gz 

    from http://ftp.gnu.org/pub/gnu/libiconv/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -zxf $GLOBAL_SRC_DIR/libiconv-1.14.tar.gz
    cd $SRC_DIR/libiconv-1.14/
    sh /configure –-prefix=$LIBICONV_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install
    

    zlib 1.2.8

    This is a popular library implementing Deflate, i.e. the compression algorithm used by Gzip and Zip. Download the file

    zlib-1.2.8.tar.gz

    from http://zlib.net into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    
    
    cd $SRC_DIR tar -xf $GLOBAL_SRC_DIR/zlib-1.2.8.tar.gz 
    cd $SRC_DIR/zlib-1.2.8/ 
    make -f win32/Makefile.gcc SHAREDLIB=libz.dll 
    mkdir -p $ZLIB_PREFIX/bin mkdir -p $ZLIB_PREFIX/include 
    mkdir -p $ZLIB_PREFIX/lib 
    cp libz.dll $ZLIB_PREFIX/bin/ 
    cp zconf.h zlib.h $ZLIB_PREFIX/include/ 
    cp libz.a $ZLIB_PREFIX/lib/ 
    cp libz.dll.a $ZLIB_PREFIX/lib/

    Bzip2 1.0.6

    This is a high-quality data compressor. Download the file

    bzip2-1.0.6.tar.gz

    from http://www.bzip.org into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    
    
    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/bzip2-1.0.6.tar.gz
    cd $SRC_DIR/bzip2-1.0.6
    make -f Makefile
    gcc -shared -Wl,--out-implib,libbz2.dll.a -o libbz2.dll blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o
    
    mkdir -p $BZIP2_PREFIX/bin
    mkdir -p $BZIP2_PREFIX/include
    mkdir -p $BZIP2_PREFIX/lib
    
    cp bzip2 $BZIP2_PREFIX/bin/bzip2.exe
    cp libbz2.dll $BZIP2_PREFIX/bin/
    cp bzlib.h $BZIP2_PREFIX/include/
    cp libbz2.a $BZIP2_PREFIX/lib/
    cp libbz2.dll.a $BZIP2_PREFIX/lib/libbz2.dll.a

    Libtool 2.4.2

    GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface. Download the file

    libtool-2.4.2.tar.gz

    from http://www.gnu.org/software/libtool/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    
    
    cd $SRC_DIR tar -xf $GLOBAL_SRC_DIR/libtool-2.4.2.tar.gz
    cd $SRC_DIR/libtool-2.4.2 
    sh configure prefix=$LIBTOOL_PREFIX --build $MACHTYPE --enable-shared 
    make -j8 
    make install

    LibXML2 2.9.1

    Libxml2 is a XML parser and toolkit developed for the Gnome project. Download the file

    libxml2-2.9.1.tar.gz

    from http://www.xmlsoft.org/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    
    
    cd $SRC_DIR tar -xf $GLOBAL_SRC_DIR/libxml2-2.9.1.tar.gz 
    cd $SRC_DIR/libxml2-2.9.1 
    sh configure prefix=$LIBXML2_PREFIX --build $MACHTYPE --without-threads --without-python --enable-shared 
    make # Fails with segmentation fault if compiled with option -j8
    make install
    
    

    LibPNG 1.6.12

    This is a library to manpulate files in PNG format. Download the file

    libpng-1.6.12.tar.gz

    from http://www.libpng.org/pub/png/libpng.html into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/libpng-1.6.12.tar.xz
    cd $SRC_DIR/libpng-1.6.12
    sh configure prefix=$LIBPNG_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install

    LibJPEG v9a

    This is a library to manpulate files in Jpeg format. Download the file

    jpegsrc.v9a.tar.gz

    from http://www.ijg.org into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/jpegsrc.v9a.tar.gz
    cd $SRC_DIR/jpeg-9a
    sh configure prefix=$LIBJPEG_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install

    LibTIFF 4.0.3

    This is a library to manpulate files in TIFF format. Download the file

    tiff-4.0.3.tar.gz

    from ftp://ftp.remotesensing.org/pub/libtiff/ into $GLOBAL_SRC_DIR directory.

    The latest library archive has some compatibility issues with the tar command shipped with MSYS. Use the following syntax to extract the archive and ignore the errors.

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/tiff-4.0.3.tar.gz 2> /dev/null || /bin/true
    cd $SRC_DIR/tiff-4.0.3/
    sh configure –-prefix=$LIBTIFF_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install
    

    Freetype 2.5.3

    This is a software font engine. Download the file

    freetype-2.5.3.tar.gz

    from http://download.savannah.gnu.org/releases/freetype/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/freetype-2.5.3.tar.gz
    cd $SRC_DIR/freetype-2.5.3
    sh configure prefix=$FREETYPE2_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install

    Lcms2 2.6

    This is a color management engine based on International Color Consortium (ICC). Download the file

    lcms2-2.6.tar.gz

    from http://sourceforge.net/projects/lcms/files/lcms/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/lcms2-2.6.tar.gz
    cd $SRC_DIR/lcms2-2.6
    sh configure prefix=$LCMS2_PREFIX --build $MACHTYPE --enable-shared
    make -j8
    make install

    FFTW 3.3.4

    This is a library implementing the Fast Fourier Transform. Download the file

    fftw-3.3.4.tar.gz

    from ftp://ftp.fftw.org/pub/fftw/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/fftw-3.3.4.tar.gz
    cd $SRC_DIR/fftw-3.3.4/
    sh configure prefix=$FFTW_PREFIX --build $MACHTYPE --enable-shared --disable-static 
    make -j8
    make install
    

    Graphics Magick 1.4.020140831

    Download the snapshot

    GraphicsMagick-1.4.020140831.tar.xz

    from ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/snapshots/ into $GLOBAL_SRC_DIR directory.

    Using the following commands we will compile Graphics Magick in both Q8 and Q16 version (see below)

    Compile and install Graphics Magick with Quantum Depth 8 and store the compiled libraries in the diretory gm-q8

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/GraphicsMagick-1.4.020140831.tar.xz
    cd $SRC_DIR/GraphicsMagick-1.4.020140831
    sh configure prefix=$GMQ8_PREFIX --build $MACHTYPE --enable-shared --disable-static --with-quantum-depth=8 --without-perl --disable-installed
    make -j8
    make install

    Compile and install Graphics Magick with Quantum Depth 16 and store the compiled libraries in the diretory gm-q16

    make clean
    sh configure prefix=$GMQ16_PREFIX --build $MACHTYPE --enable-shared --disable-static --with-quantum-depth=16 --without-perl --disable-installed
    make install

    Note: pay a lot of attention to the optionS

    –with-quantum-depth=8
    –with-quantum-depth=16
    

    This means that Graphics Magick will manipulate all images using 8 bits or 16 bits per channel. The 8 bits per channel version is of course faster and use less memory.

    Note: the option

    --disable-uninstalled

    causes the line

    #define UseInstalledMagick 1

    to be commented out from the following file.

    /magick/magick_config.h

    This compiles GraphicsMagick without hardcoded paths. If you don't add this option, some programs built with GraphicsMagick will stop working as soon as you delete the Toochain directory or you install the program in a brand new machine.

    Notes: to debug GraphicsMagick add the following environment variable, useful to understand where GraphicsMagick searches for defaults configuration files during a command execution.

    export MAGICK_DEBUG=configure

    To test if Graphics Magick has been correctly compiled, open the MSYS console and run the following commands

    gm -version
    gm convert -list resources

    The first commands should return the following info

    Feature Support:
      Thread Safe              yes
      Large Files (> 32 bit)   yes
      Large Memory (> 32 bit)  yes
      BZIP                     yes
      DPS                      no
      FlashPix                 no
      FreeType                 yes
      Ghostscript (Library)    no
      JBIG                     no
      JPEG-2000                no
      JPEG                     yes
      Little CMS               yes
      Loadable Modules         yes
      OpenMP                   yes (200805)
      PNG                      yes
      TIFF                     yes
      TRIO                     no
      UMEM                     no
      WMF                      no
      X11                      no
      XML                      yes
      ZLIB                     yes

    I also recommend to run the command "make check" to run all Graphics Magick tests.

    make check

    Image Magick 6.8.9-7

    Download the file

    ImageMagick-6.8.5-3.tar.xz

    from any of the mirros listed here http://www.imagemagick.org/script/download.php into $GLOBAL_SRC_DIR directory.

    Image Magick compiles exactly like GraphicsMagick with one single exception: it fails randomly when using the make option -j8

    Compile and install Image Magick with Quantum Depth 8 and store the compiled libraries in the diretory im-q8

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/ImageMagick-6.8.9-7.tar.xz
    cd $SRC_DIR/ImageMagick-6.8.9-7
    sh configure prefix=$IMQ8_PREFIX --build $MACHTYPE --enable-shared --disable-static --with-quantum-depth=8 --without-perl --disable-installed
    make -j8 CFLAGS="-L$ZLIB_PREFIX/lib -L$BZIP2_PREFIX/lib -I$FREETYPE2_PREFIX/include/freetype2"
    make install

    Compile and install Image Magick with Quantum Depth 16 and store the compiled libraries in the diretory im-q16

    make clean
    
    sh configure prefix=$IMQ16_PREFIX --build $MACHTYPE --enable-shared --disable-static --with-quantum-depth=16 --without-perl --disable-installed
    make -j8 CFLAGS="-L$ZLIB_PREFIX/lib -L$BZIP2_PREFIX/lib -I$FREETYPE2_PREFIX/include/freetype2"
    make install

    Boost 1.57

    Boost is a standard C++ library with a lot of interesting cross-platform functionalities: smart pointers, filesystem access, etc. Compiling 1.57 with MSYS requires a small patch. Put the patch file into

    /local64/src/compile/boost-1.57-bootstrap.patch

    I thank the people behind http://nuwen.net/mingw.html who wrote the patch.

    Download the file

    boost_1_57_0.tar.gz

    from http://www.boost.org into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/boost_1_57_0.tar.gz 2> /dev/null || /bin/true
    cd $SRC_DIR/boost_1_57_0
    patch -d $SRC_DIR/boost_1_57_0 -p1 < $SRC_DIR/compile/patch/boost-1.57-bootstrap.patch
    sh bootstrap.sh --with-toolset=mingw

    The bootstrap command builds the tools b2.exe and bjam.exe that are used to compile Boost. The two files are identical but in recent distribution of Boost the file bjam.exe has been renamed into b2.exe.

    Run the following command

    b2 -j4 --prefix=$BOOST_PREFIX --disable-filesystem2 --without-context --without-coroutine --without-python toolset=gcc /
        address-model=64 variant=release link=shared threading=multi pch=off install

    Finally run the following commands to move all dll files into the bin directory to complain with the standard build structure.

    mkdir $BOOST_PREFIX/bin
    mv $BOOST_PREFIX/lib/*.dll $BOOST_PREFIX/bin

    The option

    --disable-filesystem2

    is used to disable the compilation of a deprecated filesystem API.

    From Boost documentation the new module Context requires MASM64 (ml64.exe) that is a part of Microsoft's Windows Driver Kit. See

    http://www.boost.org/doc/libs/1_56_0/libs/context/doc/html/context/requirements.html

    You can either download it or simply disable the compilation of the Context module using the option

    --without-context

    Same story with the coroutine module.

    Botan 1.10.9

    Botan is a BSD-licensed crypto library for C++. In order to configure Botan you must install either Python 3.3.2 or 2.7.

    Download the file

    Botan-1.10.9.tgz

    from http://botan.randombit.net/download.html into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/Botan-1.10.9.tgz
    cd Botan-1.10.9
    

    If you are using a 64 compiler run the following command

    python configure.py --prefix=$BOTAN_PREFIX --cc=gcc --os=mingw --cpu=x86_64

    If you are using a 32 compiler run the following command

    python configure.py --prefix=$BOTAN_PREFIX --cc=gcc --os=mingw --cpu=i386

    Then run the following. This is not required with Python 2.7, only with Python 3.3, but it doesn't harm to run it anyway.

    sed 's#\(.)#/1#g' Makefile > Makefile.tmp # Fix an issue with incorrect python path separator in Windows
    mv Makefile.tmp Makefile
    make -j8
    make install
    

    The "sed" command is used to fix an issue with the python configuration script when run using mingw. This procedure will create a quite big static library and, if you want to reduce its size, you must specify the modules to compile using a command like the following one.

    The option "--link-method=copy" seems to fix some issues when compiling the code on Windows 8.

    python configure.py --prefix=/mingw/local --cc=gcc --os=mingw --cpu=x86_64 --no-autoload --link-method=copy --enable-modules=aes,/
        algo_base,algo_factory,auto_rng,base64,bigint,datastor,emsa4,engine,/
        filters,hash,hex,hmac,hmac_rng,if_algo,kdf,keypair,libstate,mac,md5,/
        mdx_hash,mgf1,mode_pad,pbe,pbkdf,pem,pk_filts,pubkey,randpool,rng,rsa,/
        sha1_sse2,sha2_32,sha2_64,win32_crit_section,win32_stats
    

    Important: If you want to build a shared DLL and an import library type the following commands inside the Botan source directory

    g++ -shared -o libbotan-1.10.dll -Wl,--out-implib=libbotan-1.10.dll.a -Wl,--export-all-symbols -Wl,--add-stdcall-alias  
        -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc build/lib/*.o
    cp libbotan-1.10.dll $BOTAN_PREFIX/bin
    cp libbotan-1.10.dll.a $BOTAN_PREFIX/lib

    Open SSL 1.0.1h

    This is required to compile Qt 5.3.2. Download the file

    openssl-1.0.1h.tar.gz 

    from http://www.openssl.org/ and copy it into the directory $GLOBAL_SRC_DIR. Open a MSYS terminal and run the following commands:

    cd $SRC_DIR
    tar -zxvf $GLOBAL_SRC_DIR/openssl-1.0.1h.tar.gz
    cd openssl-1.0.1h
    sh Configure --prefix=$OPENSSL_PREFIX no-idea no-mdc2 no-rc5 shared mingw64

    Then run the following commands. Do not add the option -j8 to make otherwise you will experience random failures.

    make depend
    make
    make install 

    ICU4c 54

    ICU4c is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications.

    This is required to compile Qt 5.3.2. Download the source file

    icu4c-54_1-src.zip

    from http://download.icu-project.org/files/icu4c/54.1/ and copy it into the directory $GLOBAL_SRC_DIR. Open a MSYS terminal and run the following commands:

    cd $SRC_DIR
    unzip $GLOBAL_SRC_DIR/icu4c-54_1-src.zip
    cd icu/Source  
    sh configure --prefix=$ICU_PREFIX --build $MACHTYPE
    make
    make install
    mv $ICU_PREFIX/lib/*.dll $ICU_PREFIX/bin

    gperf 3.0.4

    GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table, in form of C or C++ code, for looking up a value depending on the input string.

    This is required to compile Qt 5.3.2. Download the source file

    gperf-3.0.4.tar.gz

    from http://www.gnu.org/software/gperf/ and copy it into the directory $GLOBAL_SRC_DIR. Open a MSYS terminal and run the following commands:

    cd $SRC_DIR
    tar xf $GLOBAL_SRC_DIR/gperf-3.0.4.tar.gz
    cd gperf-3.0.4
    sh configure --prefix=$GPERF_PREFIX --build $MACHTYPE
    make -j8
    make install

    Qt 5.4 (without WebKit)

    Note: If you don't want to compile QT you can download a precompiled version from here: http://www.tver-soft.org/qt64

    Please note that, as explained earlier, you need Perl 64 bits installed first otherwise the configure command will complain about some missing header files. The Qt distribution can be downloaded from Nokia at http://download.qt.io/official_releases/qt/5.4/5.4.0/single/

    Download the file

    qt-everywhere-opensource-src-5.4.0.tar.xz

    into $GLOBAL_SRC_DIR directory.  Open a MSYS console and run the following commands to reset all Qt related environment variables that we set by default in the configuration file. This step is absolutely required to compile Qt.

    export QMAKESPEC=$QT_SRC_DIR/qtbase/mkspecs/win32-g++/
    export QTDIR=
    export QT_PLUGIN_PATH=
    export QT_PRIVATE_HEADERS=
    export LANG=

    Then run the following commands to start a build inside the same directory

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/qt-everywhere-opensource-src-5.4.0.tar.xz 2> /dev/null || /bin/true
    cd $QT_SRC_DIR

    Finally run the configuration procedure and build

    sh $QT_SRC_DIR/configure -v -prefix $QT_PREFIX -opensource -confirm-license -platform win32-g++ -shared -release /
    -opengl desktop -c++11 -skip webkit -openssl -icu -nomake tests
    
    sh $QT_SRC_DIR/configure -v -prefix $QT_PREFIX -opensource -confirm-license -platform win32-g++ -shared -release / -skip webkit -opengl desktop -c++11 -openssl -icu -nomake tests

    Run the mingw make command

    mingw32-make
    mingw32-make install

    Warning: do not use -j option when compiling Qt as it generate rare and random errors. Because of this limitation compiling Qt requires several hours.

    An additional and important step is still required for a working Qt environment and for qmake to function properly: you have to create a qt.conf file inside the $QT_PREFIX/bin directory with the following content:

    [Paths]
    Prefix=..

    Eventualy, to have a properly working Qt environment you need to set the following variables that have been reset before the compliation.

    export QMAKESPEC=$QT_PREFIX/mkspecs/win32-g++/
    export QTDIR=$QT_PREFIX
    export QT_PLUGIN_PATH=$QT_PREFIX/plugins
    export QT_PRIVATE_HEADERS=$QT_PREFIX/include
    export LANG=en_US
    A Qt application to run must have a "platforms" subdirectory shipped together with the executable. You can copy the content of the platform directory "$QT_PREFIX/qt/plugins/platforms" or, while you are developing, you can simply set the QT_PLUGIN_PATH. To test if Qt is compiled and installed properly type the following command
    designer.exe

    To compile and install the documentation run the following commands. Find and sed command are used to fix a path problem when compiling with MSYS

    cd  $QT_SRC_DIR
    find . -type f -name 'Makefile*' -print0 | xargs -0 sed -i 's,\local64\dst\qt\bin\,/local64/dst/qt/bin/,'
    make docs # For some reason mingw32-make doesn't work when building the documentation.
    make install_docs

    Once the docs are installed run the assistant and check if the documentation is available

    assistant.exe

    Qt Creator 3.2.1 for Qt 5.4

    Download the file

    qt-creator-opensource-src-3.2.1.tar.gz

    from http://download.qt-project.org/official_releases/qtcreator/3.2/3.2.1/

    into $GLOBAL_SRC_DIR directory. Be sure you have the Qt environment correctly configured as explained in the previous paragraph, the file qt.conf in place and the variable QT_CREATOR_PREFIX set. Open a MSYS terminal and run the following commands to properly configured all Qt

    cd $SRC_DIR
    tar xf $GLOBAL_SRC_DIR/qt-creator-opensource-src-3.2.1.tar.gz 2> /dev/null || /bin/true
    cd $SRC_DIR/qt-creator-opensource-src-3.2.1
    mkdir build
    cd build
    qmake ../qtcreator.pro -r CONFIG+=release
    mingw32-make release
    mingw32-make install INSTALL_ROOT=$QT_CREATOR_PREFIX

    To check if qtcreator has been compiled and istalled properly tyoe the command

    qtcreator.exe
    
    
    
    

    OpenCV 2.4.9

    OpenCV is a powerful set realtime image processing libraries. You need to download the following file from the GIT repository in zip format

    opencv-2.4.9.zip

    from https://github.com/Itseez/opencv/archive/2.4.9.zip into $GLOBAL_SRC_DIR directory and using a MSYS terminal run the following commands. Please note that we need CMake installed. OpenCV supports both Python 3 and 2.7.

    cd $SRC_DIR
    unzip $GLOBAL_SRC_DIR/opencv-2.4.9.zip
    cd $SRC_DIR/opencv-2.4.9
    mkdir release
    cd release
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$OPENCV_PREFIX -D CMAKE_SH=/mingw/msys/bin/sh.exe 
        -D CMAKE_CXX_COMPILER=$MINGW_HOME/bin/g++.exe -D CMAKE_C_COMPILER=$MINGW_HOME/bin/gcc.exe 
        -D CMAKE_MAKE_PROGRAM=$MINGW_HOME/bin/mingw32-make.exe -D CMAKE_RC_COMPILER=$MINGW_HOME/bin/windres.exe 
        -D CMAKE_LINKER=$MINGW_HOME/bin/ld.exe -G "MinGW Makefiles" $SRC_DIR/opencv-2.4.9
    mingw32-make -j8
    mingw32-make install
    

    To develop with OpenCV you may need a configuration file for pkg-config. Download the file opencv.pc (this is for the 64 bits toolchain) and save it into the directory

    $OPENCV_PREFIX/lib/pkgconfig/

    libffi 3.0.13

    FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. Download the file

    libffi-3.0.13.tar.gz

    from http://sourceware.org/libffi/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/libffi-3.0.13.tar.gz
    cd libffi-3.0.13
    sh configure --prefix=$LIBFFI_PREFIX --host=x86_64-w64-mingw32

    The run the following commands

    make -j8
    make install

    gettext 0.18.3

    This is a set of tools that provides a framework to help other GNU packages produce multi-lingual messages. Download the file

    gettext-0.18.3.tar.gz

    from http://www.gnu.org/software/gettext/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/gettext-0.18.3.tar.gz
    cd gettext-0.18.3
    sh configure --prefix=$GETTEXT_PREFIX --build=x86_64-w64-mingw32 --enable-threads=win32 
        --enable-relocatable

    The run the following commands

    cd gettext-runtime
    make -j8
    make install

    glib 2.43.2

    Download the file

    glib-2.43.2.tar.xz

    from http://ftp.gnome.org/pub/GNOME/sources/glib/2.43/ into $GLOBAL_SRC_DIR directory. Open a MSYS terminal and run the following commands

    cd $SRC_DIR
    tar -xf $GLOBAL_SRC_DIR/glib-2.43.2.tar.xz
    cd glib-2.43.2
    sh configure --prefix=$GLIB_PREFIX --build=x86_64-w64-mingw32 --with-threads=win32 
        --with-pcre=internal --disable-debug --disable-gtk-doc

    The run the following commands

    make -j8
    make install

    CREDITS

    I want to thank the Photivo team for their documentation and key suggestions, Bob Friesenhahn of Graphics Magick and Ruben of MinGW64 for their help. Thanks to Ingar Satgnu for his guide about installing the latest MSYS tools and configuring the Toolchain to allow both 32 and 64 bits compilers.

    Photivo - http://photivo.org

    Graphics Magick - http://www.graphicsmagick.org

    MinGW-w64 - http://mingw-w64.sourceforge.net

    Ingar Satgnu - http://ingar.satgnu.net/devenv/mingw32/index.html

    ASCEND - http://ascend4.org/Setting_up_a_MinGW-w64_build_environment

    EXTERNAL LINKS

    Tver-Soft.org - http://www.tver-soft.org/qt64

    DOCUMENT LOG

    01 February 2015 - Big upgrade from MSYS to MSYS2, few changes to installation procedure and configuration files. Now compiling with MinGW 64 toolchain with gcc 4.9.2 (C++14). Qt 5.4 without WebKit, Boost 1.57.

    08 October 2014 - Using new Toolchain Ming Builds for 64 bits - in this document I won't support 32 bits architectures anymore. The new Toolchain is quite important and requires modifications in most configuration file. Update of CMake 3.0.2 now installed into a different directory. Update to Python 2.7.8, Scons 2.3.3, Ruby 2.3.1, libpng 1.6.3, libjeg 9a, libtif 4.0.3, Freetyle 2.5.3, lcms 2.6, GraphicsMagick 1.4.020140831, Image Magick 6.8.9-7, Boost 1.56, Open SSL 1.0.1h, ICU4c 54, OpenCV 2.4.9, latest Flex-Bison, QT 5.3.2 (without Webkit - If anybody is able to compile WebKit please contact me), Qt Creator 3.2.1. 

    08 January 2014 - Updated the following software: Boost 1.55, Botan 1.10.7, Qt 5.2.0, Qt 3.0.0, GraphicMagick 1.4.020140101, OpenCV 2.4.8, GLib 2.39.2. Rollback to Python 2.7 to support SCons. Small update to profile.local for both 32 and 64 toolchains.

    13 September 2013 - Added an option to Botan configure command to fix an issue when compiling on Windows 8. Fixed few syntax errors and added a note regarding -j option on Window 8. Thanks Steve Dewey for the feedback. Updated Qt to version 5.1.1 and GraphicsMagick to build 1.4.020130908.

    14 August 2013 - Fixed incorrect pkgconfig path in configuration files. Updated GraphicsMagick to build 1.4.020130810. Updated gettext to version 0.18.3. Added compilation instructions for libffi 3.0.13 and glib 2.34.3.

    11 August 2013 - Updated OpenSSL to version 1.0.1e and ICU to version 51.2. Added some important notes to configure a properly working Qt 5.1 environment. Added compilation instructions for Qt Creator 2.8.0.

    08 August 2013 - Added Win Flex-Bison software for MSYS required to compile Qt 5.1 WebKit. Added instrution to compile OpenSSL, ICU and gperf required by Qt 5.1.

    05 August 2013 - Compilation instructions for Qt 5.1. Relocation of Perl 64 bits and Python 64 bits into the toolchain. Installation of Ruby 64 bits required by Qt 5.1. Configuration files rewritten to clearly separate the building environment from the system environment and to simplify the compilation of Qt 5.1 in both 32 and 64 bits. Added a patch to MinGW 32 bits compiler to fix a compilation problem with Qt 5.1. Updated compilation instructions for libxml and ImageMagick.

    31 July 2013 - All source code is now stored into a common position $GLOBAL_SRC_DIR and the same one is used to compile both 32 and 64 bits versions of all libraries. The procedure described in the document has now been tested with the following new libraries: pkg-config-lite 0.28-1, zlib 1.2.8, libxml2 2.9.1, libpng 1.6.3, jpeg v9, freetype 2.5.0, lcms2 2.5, fftw 3.3.3.

    30 July 2013 - Now using Active Perl 5.16.3 and Python 3.3.2. Updated compilation instructions for OpenCV 2.4.6.1.

    27 July 2013 - Patch and compilation instructions for Boost 1.54.

    29 April 2013 - Latest Ruben toolchain with gcc 4.8. Updated compilation instructions (added option pch=off) for Boost 1.53. Updated the following libraries: Open CV 2.4.5, GraphicsMagick 1.4.020130420, ImageMagick 6.8.5-3.

    13 March 2013 - New versions of Graphics Magick 1.4.020130303, Image Magick 6.8.3-9, Boost 1.53 and Open CV 2.4.4. Added some notes regarding the correct version of Python to use, preferably 2.7.

    24 December 2012 - Dll files produced during boost compilation are now moved into a bin directory to complain with standard structure.

    07 December 2012 - Installation of latest MSYS. Toolchain structure fully reviewed to allow both 32 and 64 bits compilers at the same time. Built packages now installed into separate directories. New packages added: OpenCV, pkg-config and gettext.

    28 November 2012 - All documentation is now focused on MingW64 Ruben toolchain with gcc 4.7.2. Updated the following libraries: Boost 1.52, Graphics Magick snapshot 1.4.020121119, Qt 4.8.3. Added compiling instructions for Image Magick 6.8.0-7.

    05 October 2012 - Latest Ruben toolchain release with gcc 4.7.2. Updated the following libraries: Boost 1.51, lcms2-2.4, libpng-1.5.13, libxml2-2.9.0, tiff-4.0.3, Qt 4.8.2, Graphics Magick snapshot 1.4.020120930. Graphics Magick now compiled in both Q8 and Q16 version.

    19 June 2012 - Botan 1.10.2 now working with Python 3.2.3 even though path separators still requires fix.

    18 June 2012 - Added compilation instructions for BZip2, Libtool, LibXML2 and FreeType. Updated the following libraries: Botan 1.10.2, Jpeg v.8d, libPNG 1.5.11, libXML2 2.8.0, libTiff 4.0.2, zlib 1.2.7, GraphicsMagick build 1.4.020120616.

    21 May 2012 - Latest Ruben toolchain release and Graphics Magick build 1.4.020120516.

    25 April 2012 - New Ruben toolchain with GCC 4.7, Qt 4.8.1 and CMake 2.8.8.

    20 April 2012 - New libraries libpng 1.5.10 and boost 1.49.0. Using now GraphicsMagick build 1.4.020120419.

    23 February 2012 - New libraries libpng 1.5.9 and libtiff 4.0.1. Using now GraphicsMagick build 1.4.020120219.

    07 February 2012 - New libraries zlib 1.2.6 and libpng 1.5.8. Patches for zlib no longer required. Using now GraphicsMagick build 1.4.020120205.

    http://www.kineticsystem.org/mingw

  • 相关阅读:
    递归神经网络 RNN 原理(上)
    递归神经网络
    队列-Python 实现
    Tableau 我常用函数整理
    代码重构(OOP)-小栗子(PyQt5)
    Python基础
    Excel 数据显示到网页
    采坑
    Python基础
    JavaScript一些对象。
  • 原文地址:https://www.cnblogs.com/findumars/p/8290419.html
Copyright © 2011-2022 走看看