title: Cross-compiling boost for Windows on Linux
body: <p>I'm trying to create mingw binaries for boost on a Linux machine. The mingw compiler is present on my system as /usr/bin/i586-mingw32msvc-g++ and I have been able to create a simple HelloWorld.exe application.</p>
  
  <p>Here is an exact list of my actions:</p>
  
  <pre><code>$ tar xvf boost_1_46_1.tar.gz
  $ cd boost_1_46_1/
  $ echo "using gcc : 4.4.4: i586-mingw32msvc-g++ ;" &gt; user-config.jam
  $ ./bootstrap.sh
  $ ./bjam toolset=gcc target-os=windows
  </code></pre>
  
  <p>The result is this:</p>
  
  <pre><code>Building the Boost C++ Libraries.
  
  
  ...found 83 targets...
  ...updating 9 targets...
  common.mkdir bin.v2
  common.mkdir bin.v2/libs
  common.mkdir bin.v2/libs/regex
  common.mkdir bin.v2/libs/regex/build
  common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4
  common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug
  common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows
  gcc.compile.c++ bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu_test.o
  In file included from /usr/include/unicode/pwin32.h:123,
                   from /usr/include/unicode/umachine.h:47,
                   from /usr/include/unicode/uversion.h:47,
                   from libs/regex/build/has_icu_test.cpp:12:
  /usr/include/inttypes.h:290: warning: ISO C++ 1998 does not support ‘long long’
  /usr/include/inttypes.h:291: warning: ISO C++ 1998 does not support ‘long long’
  libs/regex/build/has_icu_test.cpp: In function ‘int main()’:
  libs/regex/build/has_icu_test.cpp:24: warning: unused variable ‘c’
  gcc.link bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe
  /usr/lib/gcc/i586-mingw32msvc/4.4.4/../../../../i586-mingw32msvc/bin/ld: cannot find -licuuc
  collect2: ld returned 1 exit status
  
      "i586-mingw32msvc-g++" -L"/usr/bin" -L"/usr/lib" -Wl,-R -Wl,"/usr/bin" -Wl,-R -Wl,"/usr/lib" -Wl,-rpath-link -Wl,"/usr/bin" -Wl,-rpath-link -Wl,"/usr/lib" -o "bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe" -Wl,--start-group "bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu_test.o"  -Wl,-Bstatic  -Wl,-Bdynamic -licuuc -licui18n -licudata -Wl,--end-group -g 
  
  
  ...failed gcc.link bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe...
  ...failed updating 1 target...
  ...updated 8 targets...
  Performing configuration checks
  
      - has_icu builds           : no
  warning: Graph library does not contain MPI-based parallel components.
  note: to enable them, add "using mpi ;" to your user-config.jam
  ...found 8 targets...
  ...updating 6 targets...
  common.mkdir bin.v2/libs/math
  common.mkdir bin.v2/libs/math/config
  common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4
  common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4/debug
  common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows
  gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o
  cc1plus: warnings being treated as errors
  libs/math/config/has_gcc_visibility.cpp: In function ‘int main()’:
  libs/math/config/has_gcc_visibility.cpp:13: error: visibility attribute not supported in this configuration; ignored
  
      "i586-mingw32msvc-g++"  -ftemplate-depth-128 -O0 -fno-inline -Wall -g -Werror -fvisibility=hidden -DBOOST_ALL_NO_LIB=1  -I"." -c -o "bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o" "libs/math/config/has_gcc_visibility.cpp"
  
  ...failed gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o...
  ...failed updating 1 target...
  ...updated 5 targets...
      - ../config//has_gcc_visibility builds : no
  ...found 46 targets...
  ...updating 1 target...
  gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_long_double_support.o
  ...updated 1 target...
      - ../config//has_long_double_support builds : yes
  warning: skipping optional Message Passing Interface (MPI) library.
  note: to enable MPI support, add "using mpi ;" to user-config.jam.
  note: to suppress this message, pass "--without-mpi" to bjam.
  note: otherwise, you can safely ignore this message.
  ************************************************************
  Trying to build Boost.Thread with pthread support.
  If you need pthread you should specify the paths.
  You can specify them in site-config.jam, user-config.jam
  or in the environment.
  For example:
  PTW32_INCLUDE=C:\Program Files\ptw32\Pre-built2\include
  PTW32_LIB=C:\Program Files\ptw32\Pre-built2\lib
  ************************************************************
  /home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:1079: in virtual-target.register-actual-name from module virtual-target
  error: Duplicate name of actual target: &lt;pstage/lib&gt;libboost_date_time.a
  error: previous virtual target { common%common.copy-libboost_date_time.a.STATIC_LIB { gcc%gcc.archive-libboost_date_time.a.STATIC_LIB { gcc%gcc.compile.c++-gregorian/greg_month.o.OBJ { gregorian/greg_month.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/greg_weekday.o.OBJ { gregorian/greg_weekday.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/date_generators.o.OBJ { gregorian/date_generators.cpp.CPP } } } }
  error: created from ./stage-proper
  error: another virtual target { common%common.copy-libboost_date_time.a.STATIC_LIB { gcc%gcc.archive-libboost_date_time.a.STATIC_LIB { gcc%gcc.compile.c++-gregorian/greg_month.o.OBJ { gregorian/greg_month.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/greg_weekday.o.OBJ { gregorian/greg_weekday.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/date_generators.o.OBJ { gregorian/date_generators.cpp.CPP } } } }
  error: created from ./stage-proper
  error: added properties: &lt;debug-symbols&gt;off &lt;define&gt;NDEBUG &lt;inlining&gt;full &lt;optimization&gt;speed &lt;runtime-debugging&gt;off &lt;variant&gt;release
  error: removed properties: &lt;debug-symbols&gt;on &lt;inlining&gt;off &lt;optimization&gt;off &lt;runtime-debugging&gt;on &lt;variant&gt;debug
  /home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:490: in actualize-no-scanner from module object(file-target)@3884
  /home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:135: in object(file-target)@3884.actualize from module object(file-target)@3884
  /home/francis/orig/boost_1_46_1/tools/build/v2/build-system.jam:748: in load from module build-system
  /home/francis/orig/boost_1_46_1/tools/build/v2/kernel/modules.jam:283: in import from module modules
  /home/francis/orig/boost_1_46_1/tools/build/v2/kernel/bootstrap.jam:142: in boost-build from module
  /home/francis/orig/boost_1_46_1/boost-build.jam:17: in module scope from module
  </code></pre>
  
  <p>It says libicu is not found on my system, but according to Synaptic Package Manage I have the <code>libicu-dev</code> package installed.</p>
  
  <p>I'm not sure how to get it right. Can anyone help?</p>
  
  <h3>Update 1</h3>
  
  <p>Following @Luke's recoommendation I now <code>gcc-mingw</code> toolset. So now my build instructions look like this:</p>
  
  <pre><code>tar xvf boost_1_46_1.tar.gz
  cd boost_1_46_1/
  echo "using gcc : 4.4.4: i586-mingw32msvc-g++ ;" &gt; user-config.jam
  ./bootstrap.sh
  ./bjam toolset=gcc-mingw target-os=windows
  </code></pre>
  
  <p>Which leads to the following errors:</p>
  
  <pre><code>error: toolset gcc initialization:
  error: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match
  error: initialized from
  /home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build/toolset.jam:38: in toolset.using from module toolset
  /home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build-system.jam:481: in process-explicit-toolset-requests from module build-system
  /home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build-system.jam:561: in load from module build-system
  /home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/kernel/modules.jam:283: in import from module modules
  /home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/kernel/bootstrap.jam:142: in boost-build from module
  /home/francis/orig/boost-mingw/boost_1_46_1/boost-build.jam:17: in module scope from module
  </code></pre>
  
  <h3>Update 2</h3>
  
  <p>I have also tried specifying <code>gcc-mingw</code> in the <code>user-config.jam</code> file. Then my build instructions look like this:</p>
  
  <pre><code>tar xvf boost_1_46_1.tar.gz
  cd boost_1_46_1/
  echo "using gcc-mingw : 4.4.4: i586-mingw32msvc-g++ ;" &gt; user-config.jam
  ./bootstrap.sh
  ./bjam toolset=gcc-mingw target-os=windows
  </code></pre>
  
  <p>Which leads to:</p>
  
  <pre><code>error: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match
  </code></pre>
  
  <h3>Update 3</h3>
  
  <p>Specifying <code>g++-mingw</code> in the <code>user-config.jam</code> file:</p>
  
  <pre><code>using g++-mingw : 4.4.4: i586-mingw32msvc-g++ ;
  </code></pre>
  
  <p>...leads to the same error.</p>