Thursday, April 10, 2014

[Qt] Compiling ICU with MSVC (Microsoft Visual Studio)

Text highlighted and notes added

Compiling ICU with MSVC (Microsoft Visual Studio)

Qt 5 / QtWebkit requires ICU.

Pre-built packages

The ICU Project site [] provides pre-built packages for MSVC 2010, which should work with compilers too. Anyhow, you have to compile your own version if you want to avoid the MSVC 2010 runtime dependency (because you’re using another MSVC version), or want to tailor the ICU configuration. [] also hosts packages for MSVC 2012 .

Compiling on your own




How to build

  • Download latest ICU4C source code from (, unzip
  • Make sure you’ve e.g. ‘make’ installed for Cygwin
  • Start cmd.exe and put Cygwin in PATH, convert line endings
    1. C:\icu\source> set PATH=C:\cygwin\bin;%PATH%
    2. C:\icu\source> dos2unix *
    3. C:\icu\source> dos2unix -f configure
NOTE: for PostgreSQL plugin I added it to configure as
-I "C:\Program Files (x86)\PostgreSQL\9.1\include" -L "C:\Program Files (x86)\PostgreSQL\9.1\lib" -l libpq
I tried to add icu library in the same way but it seems like these options are directly passed on to the compiler and configure script doesn’t consider them. So we need these set commands.

Check whether you have e.g. the MSVC compiler (cl.exe) in PATH. If not, set it up by calling e.g.
  1. C:\icu\source> "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
Run configure && build:
  1. C:\icu\source> bash runConfigureICU Cygwin/MSVC --prefix=/cygdrive/c/icu/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’ :
  1. C:\icu\source> bash runConfigureICU  Cygwin/MSVC --prefix=/cygdrive/c/icu/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:
  1. C:\icu\source> bash runConfigureICU  --enable-debug --disable-release Cygwin/MSVC --prefix=/cygdrive/c/icu/dist --enable-static --disable-shared
Finally, run make && make install
  1. C:\icu\source> make && make install


Add the include, lib folders to your compilation environment, e.g. for cmd.exe :
  1. C:\icu\source> set PATH=%PATH%;C:\icu\dist\lib
  2. C:\icu\source> set INCLUDE=%INCLUDE%;C:\icu\dist\include
  3. C:\icu\source> set LIB=%LIB%;C:\icu\dist\lib
When you now run Qt’s configure.exe ICU should be detected, and Qt links against the libraries.

No comments:

Post a Comment