{"id":4537,"date":"2014-03-30T13:23:40","date_gmt":"2014-03-30T13:23:40","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2014\/03\/30\/cross-compiling-boost-for-windows-on-linux-collection-of-common-programming-errors\/"},"modified":"2014-03-30T13:23:40","modified_gmt":"2014-03-30T13:23:40","slug":"cross-compiling-boost-for-windows-on-linux-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2014\/03\/30\/cross-compiling-boost-for-windows-on-linux-collection-of-common-programming-errors\/","title":{"rendered":"Cross-compiling boost for Windows on Linux-Collection of common programming errors"},"content":{"rendered":"<p>I&#8217;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>\n<p>Here is an exact list of my actions:<\/p>\n<pre><code>$ tar xvf boost_1_46_1.tar.gz\n$ cd boost_1_46_1\/\n$ echo \"using gcc : 4.4.4: i586-mingw32msvc-g++ ;\" &gt; user-config.jam\n$ .\/bootstrap.sh\n$ .\/bjam toolset=gcc target-os=windows\n<\/code><\/pre>\n<p>The result is this:<\/p>\n<pre><code>Building the Boost C++ Libraries.\n\n\n...found 83 targets...\n...updating 9 targets...\ncommon.mkdir bin.v2\ncommon.mkdir bin.v2\/libs\ncommon.mkdir bin.v2\/libs\/regex\ncommon.mkdir bin.v2\/libs\/regex\/build\ncommon.mkdir bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\ncommon.mkdir bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\/debug\ncommon.mkdir bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\/debug\/target-os-windows\ngcc.compile.c++ bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_icu_test.o\nIn file included from \/usr\/include\/unicode\/pwin32.h:123,\n                 from \/usr\/include\/unicode\/umachine.h:47,\n                 from \/usr\/include\/unicode\/uversion.h:47,\n                 from libs\/regex\/build\/has_icu_test.cpp:12:\n\/usr\/include\/inttypes.h:290: warning: ISO C++ 1998 does not support 'long long'\n\/usr\/include\/inttypes.h:291: warning: ISO C++ 1998 does not support 'long long'\nlibs\/regex\/build\/has_icu_test.cpp: In function 'int main()':\nlibs\/regex\/build\/has_icu_test.cpp:24: warning: unused variable 'c'\ngcc.link bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_icu.exe\n\/usr\/lib\/gcc\/i586-mingw32msvc\/4.4.4\/..\/..\/..\/..\/i586-mingw32msvc\/bin\/ld: cannot find -licuuc\ncollect2: ld returned 1 exit status\n\n    \"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 \n\n\n...failed gcc.link bin.v2\/libs\/regex\/build\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_icu.exe...\n...failed updating 1 target...\n...updated 8 targets...\nPerforming configuration checks\n\n    - has_icu builds           : no\nwarning: Graph library does not contain MPI-based parallel components.\nnote: to enable them, add \"using mpi ;\" to your user-config.jam\n...found 8 targets...\n...updating 6 targets...\ncommon.mkdir bin.v2\/libs\/math\ncommon.mkdir bin.v2\/libs\/math\/config\ncommon.mkdir bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\ncommon.mkdir bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\/debug\ncommon.mkdir bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\/debug\/target-os-windows\ngcc.compile.c++ bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_gcc_visibility.o\ncc1plus: warnings being treated as errors\nlibs\/math\/config\/has_gcc_visibility.cpp: In function 'int main()':\nlibs\/math\/config\/has_gcc_visibility.cpp:13: error: visibility attribute not supported in this configuration; ignored\n\n    \"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\"\n\n...failed gcc.compile.c++ bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_gcc_visibility.o...\n...failed updating 1 target...\n...updated 5 targets...\n    - ..\/config\/\/has_gcc_visibility builds : no\n...found 46 targets...\n...updating 1 target...\ngcc.compile.c++ bin.v2\/libs\/math\/config\/gcc-mingw-4.4.4\/debug\/target-os-windows\/has_long_double_support.o\n...updated 1 target...\n    - ..\/config\/\/has_long_double_support builds : yes\nwarning: skipping optional Message Passing Interface (MPI) library.\nnote: to enable MPI support, add \"using mpi ;\" to user-config.jam.\nnote: to suppress this message, pass \"--without-mpi\" to bjam.\nnote: otherwise, you can safely ignore this message.\n************************************************************\nTrying to build Boost.Thread with pthread support.\nIf you need pthread you should specify the paths.\nYou can specify them in site-config.jam, user-config.jam\nor in the environment.\nFor example:\nPTW32_INCLUDE=C:\\Program Files\\ptw32\\Pre-built2\\include\nPTW32_LIB=C:\\Program Files\\ptw32\\Pre-built2\\lib\n************************************************************\n\/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\nerror: Duplicate name of actual target: libboost_date_time.a\nerror: 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 } } } }\nerror: created from .\/stage-proper\nerror: 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 } } } }\nerror: created from .\/stage-proper\nerror: added properties: off NDEBUG full speed off release\nerror: removed properties: on off off on debug\n\/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\n\/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\n\/home\/francis\/orig\/boost_1_46_1\/tools\/build\/v2\/build-system.jam:748: in load from module build-system\n\/home\/francis\/orig\/boost_1_46_1\/tools\/build\/v2\/kernel\/modules.jam:283: in import from module modules\n\/home\/francis\/orig\/boost_1_46_1\/tools\/build\/v2\/kernel\/bootstrap.jam:142: in boost-build from module\n\/home\/francis\/orig\/boost_1_46_1\/boost-build.jam:17: in module scope from module\n<\/code><\/pre>\n<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>\n<p>I&#8217;m not sure how to get it right. Can anyone help?<\/p>\n<h3>Update 1<\/h3>\n<p>Following @Luke&#8217;s recoommendation I now <code>gcc-mingw<\/code> toolset. So now my build instructions look like this:<\/p>\n<pre><code>tar xvf boost_1_46_1.tar.gz\ncd boost_1_46_1\/\necho \"using gcc : 4.4.4: i586-mingw32msvc-g++ ;\" &gt; user-config.jam\n.\/bootstrap.sh\n.\/bjam toolset=gcc-mingw target-os=windows\n<\/code><\/pre>\n<p>Which leads to the following errors:<\/p>\n<pre><code>error: toolset gcc initialization:\nerror: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match\nerror: initialized from\n\/home\/francis\/orig\/boost-mingw\/boost_1_46_1\/tools\/build\/v2\/build\/toolset.jam:38: in toolset.using from module toolset\n\/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\n\/home\/francis\/orig\/boost-mingw\/boost_1_46_1\/tools\/build\/v2\/build-system.jam:561: in load from module build-system\n\/home\/francis\/orig\/boost-mingw\/boost_1_46_1\/tools\/build\/v2\/kernel\/modules.jam:283: in import from module modules\n\/home\/francis\/orig\/boost-mingw\/boost_1_46_1\/tools\/build\/v2\/kernel\/bootstrap.jam:142: in boost-build from module\n\/home\/francis\/orig\/boost-mingw\/boost_1_46_1\/boost-build.jam:17: in module scope from module\n<\/code><\/pre>\n<h3>Update 2<\/h3>\n<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>\n<pre><code>tar xvf boost_1_46_1.tar.gz\ncd boost_1_46_1\/\necho \"using gcc-mingw : 4.4.4: i586-mingw32msvc-g++ ;\" &gt; user-config.jam\n.\/bootstrap.sh\n.\/bjam toolset=gcc-mingw target-os=windows\n<\/code><\/pre>\n<p>Which leads to:<\/p>\n<pre><code>error: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match\n<\/code><\/pre>\n<h3>Update 3<\/h3>\n<p>Specifying <code>g++-mingw<\/code> in the <code>user-config.jam<\/code> file:<\/p>\n<pre><code>using g++-mingw : 4.4.4: i586-mingw32msvc-g++ ;\n<\/code><\/pre>\n<p>&#8230;leads to the same error.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;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. Here is an exact list of my actions: $ tar xvf boost_1_46_1.tar.gz $ cd boost_1_46_1\/ $ echo &#8220;using gcc : 4.4.4: i586-mingw32msvc-g++ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4537","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/4537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=4537"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/4537\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=4537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=4537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=4537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}