Compiling-ICU-with-MinGW

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Compiling ICU with MinGW (for adding Unicode support)

Qt 5 / QtWebkit requires ICU, which MinGW distributions do not ship.

Pre-built packages

The ICU Project site provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2010 runtime being installed.

download.qt.io also hosts packages for the MinGW toolchains Qt ships.

Inside MSYS2 shell, a pre-built ICU can be obtained. MSYS2 also contains pre-built dynamic Qt & QtCreator (and static Qt) with ICU & OpenSSL support.

Compiling on your own

Requirements

  • Either use MSYS or use MSYS2.
  • Working MinGW, or MinGW-w64 toolchain.
    • Load MinGW or MinGW-w64 toolchains.
    • NOTE: Do not use (or try to avoid using) different type of toolchains for building different sub-components for the same/main project, targeted for same platform/OS. If you are using MinGW-w64 toolchains from MSYS2\mingw32 or MSYS2\mingw64, then for building main project & all of its sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for building all of your sub-components & main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from "MinGW-builds", then for building all sub-components & main project, use same MinGW-builds toolchains.

How to build

  • Download latest ICU4C source code from http://site.icu-project.org/download (e.g. icu4c-52_1-src.zip), unzip
  • Either start MSYS-shell, or start MSYS2-shell:
    • Start a MSYS shell command prompt (C:.0\msys.bat)
    • Or, start MSYS2 shell command prompt (C:2\msys2_shell.bat)
      • See in MSYS2 page, how to prepare MSYS2-shell with build/compile related tools & dependencies & toolchains
  • Inside MSYS or MSYS2 shell, run/execute below command:
$ cd icu/source
  • Check that gcc is in PATH, otherwise add it:
    • If using MSYS shell, and if MinGW (32bit) is installed inside /c/mingw32 directory, then execute this:
$ export PATH="/c/mingw32/bin:$PATH"
    • If using MSYS2 shell, execute this, if you are building for 32bit:
$ export PATH="/c/msys2/mingw32/bin:$PATH"
    • If using MSYS2 shell, execute this, if you are building for 64bit:
$ export PATH="/c/msys2/mingw64/bin:$PATH"
  • Run configure && build:
$ ./runConfigureICU MinGW prefix=$PWD/../dist

This will generate a release shared build that you can use in both a debug and release build of Qt.

  • To link ICU statically (e.g. for a static release build of Qt), you have to append ‘—enable-static —disable-shared’ :
$ ./runConfigureICU MinGW prefix=$PWD/../dist enable-static disable-shared
  • To link ICU statically and build it in debug mode (e.g. for a static debug build of Qt), you have to prepend ‘—enable-debug —disable-release’ to the arguments:
$ ./runConfigureICU enable-debug disable-release MinGW prefix=$PWD/../dist enable-static disable-shared
  • Finally, run make && make install
$ make && make install

Using it

  • Add the include, lib folders to your compilation environment, e.g. for cmd.exe (Cmd-shell) :
C:> set PATH=%PATH%;C:\icu\dist\bin
C:> set INCLUDE=%INCLUDE%;C:\icu\dist\include
C:> set LIB=%LIB%;C:\icu\dist\lib
  • Add the include, lib folders to your compilation environment, e.g. for MSYS2-shell (or for MSYS-shell) :
$ export PATH="$PATH:/c/icu/dist/bin"
$ export INCLUDE="$INCLUDE:/c/icu/dist/include"
$ export LIB="$LIB:/c/icu/dist/lib"

When you now run Qt’s configure.exe ICU should be detected, and Qt links against the libraries.