Compiling-ICU-with-MinGW: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:MinGW]]<br />[[Category:Windows]]<br />[[Category:Qt5]]<br />[[Category:ICU]]
[[Category:MinGW]]
[[Category:Windows]]
[[Category:Qt5]]
[[Category:ICU]]


== Compiling ICU with MinGW (for adding Unicode support) ==
== Compiling ICU with MinGW (for adding Unicode support) ==
Line 7: Line 10:
== Pre-built packages ==
== Pre-built packages ==


The &quot;ICU Project site&amp;quot;:http://site.icu-project.org/download provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2010 runtime being installed.
The "ICU Project site":http://site.icu-project.org/download provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2010 runtime being installed.


&quot;download.qt.io&amp;quot;:http://download.qt.io/development_releases/prebuilt/icu/prebuilt/mingw/ also hosts packages for the MinGW toolchains Qt ships.
"download.qt.io":http://download.qt.io/development_releases/prebuilt/icu/prebuilt/mingw/ 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 &amp; QtCreator (and static Qt) with ICU &amp; OpenSSL support.
Inside MSYS2 shell, a pre-built ICU can be obtained. MSYS2 also contains pre-built dynamic Qt &amp; QtCreator (and static Qt) with ICU &amp; OpenSSL support.
Line 22: Line 25:
* Working MinGW, or MinGW-w64 toolchain.
* Working MinGW, or MinGW-w64 toolchain.
** Load MinGW or MinGW-w64 toolchains.
** 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 &amp; all of its sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for building all of your sub-components &amp; main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from &quot;MinGW-builds&amp;quot;, then for building all sub-components &amp; main project, use same MinGW-builds 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 &amp; all of its sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for building all of your sub-components &amp; main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from "MinGW-builds", then for building all sub-components &amp; main project, use same MinGW-builds toolchains.


=== How to build ===
=== How to build ===
Line 32: Line 35:
*** See in [[MSYS2]] page, how to prepare MSYS2-shell with build/compile related tools &amp; dependencies &amp; toolchains  
*** See in [[MSYS2]] page, how to prepare MSYS2-shell with build/compile related tools &amp; dependencies &amp; toolchains  


* Inside MSYS or MSYS2 shell, run/execute below command:<br /><code><br />&amp;#36; cd icu/source<br /></code>
* Inside MSYS or MSYS2 shell, run/execute below command:
<code>
$ cd icu/source
</code>


* Check that gcc is in PATH, otherwise add it:
* Check that gcc is in PATH, otherwise add it:
** If using MSYS shell, and if MinGW (32bit) is installed inside /c/mingw32 (C:32 directory, then execute this:<br /><code><br />&amp;#36; export PATH=&quot;/c/mingw32/bin:&amp;#36;PATH&amp;quot;<br /></code>
** If using MSYS shell, and if MinGW (32bit) is installed inside /c/mingw32 (C:32 directory, then execute this:
** If using MSYS2 shell, execute this, if you are building for 32bit:<br /><code><br />&amp;#36; export PATH=&quot;/c/msys2/mingw32/bin:&amp;#36;PATH&amp;quot;<br /></code>
<code>
** If using MSYS2 shell, execute this, if you are building for 64bit:<br /><code><br />$ export PATH=&quot;/c/msys2/mingw64/bin:&amp;#36;PATH&amp;quot;<br /></code>
$ export PATH="/c/mingw32/bin:$PATH"
</code>
** If using MSYS2 shell, execute this, if you are building for 32bit:
<code>
$ export PATH="/c/msys2/mingw32/bin:$PATH"
</code>
** If using MSYS2 shell, execute this, if you are building for 64bit:
<code>
$ export PATH="/c/msys2/mingw64/bin:$PATH"
</code>


* Run configure &amp;&amp; build:<br /><code><br />&amp;#36; ./runConfigureICU MinGW —prefix=&amp;#36;PWD/../dist<br /></code><br /> This will generate a release shared build that you can use in both a debug and release build of Qt.
* Run configure &amp;&amp; build:
<code>
$ ./runConfigureICU MinGW —prefix=$PWD/../dist
</code>
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’ :<br /><code><br />&amp;#36; ./runConfigureICU MinGW —prefix=&amp;#36;PWD/../dist —enable-static —disable-shared<br /></code>
* To link ICU statically (e.g. for a static release build of Qt), you have to append ‘—enable-static —disable-shared’ :
<code>
$ ./runConfigureICU MinGW —prefix=$PWD/../dist —enable-static —disable-shared
</code>


* 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:<br /><code><br />&amp;#36; ./runConfigureICU —enable-debug —disable-release MinGW —prefix=&amp;#36;PWD/../dist —enable-static —disable-shared<br /></code>
* 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:
<code>
$ ./runConfigureICU —enable-debug —disable-release MinGW —prefix=$PWD/../dist —enable-static —disable-shared
</code>


* Finally, run make &amp;&amp; make install<br /><code><br />&amp;#36; make &amp;&amp; make install<br /></code>
* Finally, run make &amp;&amp; make install
<code>
$ make &amp;&amp; make install
</code>


== Using it ==
== Using it ==


* Add the include, lib folders to your compilation environment, e.g. for cmd.exe (Cmd-shell) :<br /><code><br />C:gt; set PATH=&amp;#37;PATH&amp;amp;#37;;C:C:gt; set INCLUDE=&amp;#37;INCLUDE&amp;amp;#37;;C:C:gt; set LIB=&amp;#37;LIB&amp;amp;#37;;C:</code>
* Add the include, lib folders to your compilation environment, e.g. for cmd.exe (Cmd-shell) :
* Add the include, lib folders to your compilation environment, e.g. for MSYS2-shell (or for MSYS-shell) :<br /><code><br />&amp;#36; export PATH=&quot;&amp;#36;PATH:/c/icu/dist/lib&amp;quot;<br />&amp;#36; export INCLUDE=&quot;&amp;#36;INCLUDE:/c/icu/dist/include&amp;quot;<br />&amp;#36; export LIB=&quot;&amp;#36;LIB:/c/icu/dist/lib&amp;quot;<br /></code>
<code>
C:gt; set PATH=&amp;#37;PATH&amp;amp;#37;;C:C:gt; set INCLUDE=&amp;#37;INCLUDE&amp;amp;#37;;C:C:gt; set LIB=&amp;#37;LIB&amp;amp;#37;;C:</code>
* Add the include, lib folders to your compilation environment, e.g. for MSYS2-shell (or for MSYS-shell) :
<code>
$ export PATH="$PATH:/c/icu/dist/lib"
$ export INCLUDE="$INCLUDE:/c/icu/dist/include"
$ export LIB="$LIB:/c/icu/dist/lib"
</code>


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

Revision as of 08:54, 25 February 2015


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":http://site.icu-project.org/download 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":http://download.qt.io/development_releases/prebuilt/icu/prebuilt/mingw/ 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 (C:32 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 &amp;&amp; make install

Using it

  • Add the include, lib folders to your compilation environment, e.g. for cmd.exe (Cmd-shell) :
C:gt; set PATH=&amp;#37;PATH&amp;amp;#37;;C:C:gt; set INCLUDE=&amp;#37;INCLUDE&amp;amp;#37;;C:C:gt; set LIB=&amp;#37;LIB&amp;amp;#37;;C:
  • Add the include, lib folders to your compilation environment, e.g. for MSYS2-shell (or for MSYS-shell) :
$ export PATH="$PATH:/c/icu/dist/lib"
$ 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.