Opened 9 years ago

Closed 5 years ago

#8770 closed Bugs (invalid)

has_icu_test depending on DEBUG ICU libraries

Reported by: Martin Baute <solar@…> Owned by: Artyom Beilis
Milestone: To Be Determined Component: locale
Version: Boost 1.54.0 Severity: Problem
Keywords: ICU Cc:

Description

I am pretty sure this has been brought to attention before, as I distinctly remember reading a discussion on the issue, but I couldn't find it in the database.

Platform is Windows XP, MS Visual Studio 8.

Having unpacked the latest ICU release to support MSVC 8 (which is ICU 4.0.1), I am trying to compile Boost 1.54.0 with ICU support enabled.

Using the instructions, I call:

bjam -sICU_PATH=C:\contrib\icu-4.0.1

I get:

...

  • has_icu builds : no

In bin.v2\config.log:

msvc.link bin.v2\libs\regex\build\msvc-8.0\debug\has_icu.exe LINK : fatal error LNK1181: cannot open input file 'icuind.lib'

call "C:\Programme\microsoft visual studio 8\vc\vcvarsall.bat" x86 >nul

link /NOLOGO /INCREMENTAL:NO /DEBUG /MACHINE:X86 /MANIFEST /subsystem:console

if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%

...failed msvc.link bin.v2\libs\regex\build\msvc-8.0\debug\has_icu.exe bin.v2\libs\regex\build\msvc-8.0\debug\has_icu.pdb...

In bin.v2\libs\regex\build\msvc-8.0\debug:

"bin.v2\libs\regex\build\msvc-8.0\debug\has_icu_test.obj" "icudt.lib" "icuind.lib" "icuucd.lib"

This happens even if I state variant=release on the bjam line. I.e., to determine whether ICU is present for a release build, Boost is looking for debug versions of the ICU libraries. This renders the default instructions of how to build Boost with ICU support non-functional with the default distribution of ICU for Windows, effectively forcing people to manually compile ICU instead of using the ready-made binaries, to satisfy peculiarities of the Boost build system. (Unless there are some command-line switches I am not aware of, which should then be made part of the respective documentation of the build process.)

Thumbs down, that's not the way to go.

Change History (4)

comment:1 by Martin Baute <solar@…>, 9 years ago

I just confirmed that a self-compiled version of ICU, including the debug versions of the libraries, indeed makes all the difference:

  • has_icu builds : yes

So, bjam should link that test executable against the release version of the ICU libraries, at least when asked to build the release version of Boost only.

comment:2 by viboes, 9 years ago

Component: Building Boostlocale
Owner: set to Artyom Beilis

comment:3 by josuegomes, 5 years ago

It seems that Boost.Locale is abandoned.

The solution here is to bypass the brain damaged ICU detection by setting ICU_PATH and ICU_LINK in the bjam command line. Note that this affects both Locale and Regex.

comment:4 by Artyom Beilis, 5 years ago

Resolution: invalid
Status: newclosed

Note: you should never link release with debug versions and other way around since you get incompatible runtime i.e. link with both MSVCRTXXD.DLL and MSVCRTXX.DLL

It is by design.

Note: See TracTickets for help on using tickets.