Boost + ICU in Windows with MinGW
Hi mates, I have a question about boost compiled with icu support for using it in another library (freeling). All this work is in windows using mingw32, the icu 4.2.1 library and boost 1_40. I compile boost with the following bjam line $ bjam toolset=gcc variant=release threading=multi threadapi=win32 link=shared runtime-link=shared --prefix=$PREFIX --user-config=tools/build/v2/user-config.jam -j 2 --with-filesystem --with-program_options --with-regex define=U_STATIC_IMPLEMENTATION=1 -sHAVE_ICU=1 -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged -a --build-type=complete stage I applied the following patch before compilation, without it I don't get the boost_regex-mt.lib and boost_regex_mt.dll, but the libboost_regex-mt.lib. https://build.opensuse.org/package/view_file?file=boost-regexdll.patch&package=mingw32-boost&project=windows%3Amingw%3Awin32&srcmd5=561592621be0390a05766ba9ae4d390a This compilation works great, and also the compilation of the freeling library, which generates an exe. But after that, If I try to run the generated exe (with the boost dlls ) I get this error terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> > what(): Could not initialize ICU resources Could anyone help me undersanding this error? I suppose it has something to do with some missing ICU files, and I'm sure i make some mistake in the compilation process but I didn't get where is it. I also tried building boost with link=static runtime-link=static, but of course if I do that I don't get the boost_regex-mt.lib but the libbost_regex-mt.lib (and i need the dynamic library for compilation of the freeling library). I now this is not the ICU forum, but if it helps for catching the problem ICU was compiled this way a) apply some diffs from this patch http://devs.openttd.org/~terkhen/libicu/libicu_4_6_mingw32.diff (reference link http://wiki.openttd.org/Compiling_on_MinGW#Compiling_libicu), to make it compile in MinGW (not all cause there are some difference between icu 4.2.1 and 4.6). b) After that run $ ./configure --prefix=/mingw/ --disable-strict --disable-threads $ make install This compilation doesn't generate any dll, only the libs for making boost compile. Thanks in advance and best regards, and sorry if this mails is a mess, I only try to give all the information I think is useful.
I applied the following patch before compilation, without it I don't get the boost_regex-mt.lib and boost_regex_mt.dll, but the libboost_regex-mt.lib. https://build.opensuse.org/package/view_file?file=boost-regexdll.patch&package=mingw32-boost&project=windows%3Amingw%>3Awin32&srcmd5=561592621be0390a05766ba9ae4d390a
Please note that regex shared lib support on mingw/cygwin is partly broken - that's why it's disabled in the Jamfile!
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error>
what(): Could not initialize ICU resources
It means that a call to ICU::Collator::createInstance failed, last time someone had that error it was because their ICU data dll was broken (ie didn't actually have any locale data in it). HTH, John.
John, thank you very much for your help.
Please note that regex shared lib support on mingw/cygwin is partly broken - that's why it's disabled in the Jamfile!
I saw in the last version of boost (1.46) that the regex Jamfile has some of the tweaks the patch has (with mingw enabled and cygwin disabled, which is ok for me). Maybe trying with this version is a possibility?
It means that a call to ICU::Collator::createInstance failed, last time someone had that error it was because their ICU data dll was broken (ie didn't actually have any locale data in it).
This means that the boost dll doesn't found the icu dll? Could you tell me which dll is searching or the approximate weight? I have a few icu dll (one of around 15MB) alongside boost_regex-mt.dll, but maybe I'm putting the wrong dll (as icu doesn't generate both .lib and .dll in the same compilation, I have to make two compilation passes with different tweaks, so maybe I'm doing something wrong in this pass). Thanks in advance!
From: boost.regex@virgin.net To: boost-users@lists.boost.org Date: Tue, 1 Mar 2011 09:28:00 +0000 Subject: Re: [Boost-users] Boost + ICU in Windows with MinGW
I applied the following patch before compilation, without it I don't get the boost_regex-mt.lib and boost_regex_mt.dll, but the libboost_regex-mt.lib. https://build.opensuse.org/package/view_file?file=boost-regexdll.patch&package=mingw32-boost&project=windows%3Amingw%>3Awin32&srcmd5=561592621be0390a05766ba9ae4d390a
Please note that regex shared lib support on mingw/cygwin is partly broken - that's why it's disabled in the Jamfile!
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error>
what(): Could not initialize ICU resources
It means that a call to ICU::Collator::createInstance failed, last time someone had that error it was because their ICU data dll was broken (ie didn't actually have any locale data in it).
HTH, John.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
It means that a call to ICU::Collator::createInstance failed, last time someone had that error it was because their ICU data dll was broken (ie didn't actually have any locale data in it).
This means that the boost dll doesn't found the icu dll? Could you tell me which dll is searching or the approximate weight? I have a few icu dll (one of around 15MB) >alongside boost_regex-mt.dll, but maybe I'm putting the wrong dll (as icu doesn't generate both .lib and .dll in the same compilation, I have to make two compilation >passes with different tweaks, so maybe I'm doing something wrong in this pass).
It's finding the dll OK but the call to Collator::createInstance is failing (returning an error). HTH, John.
participants (2)
-
John Maddock
-
Jose Mondefo