Не удается собрать Boost::Locale с ICU 53.1 на Visual C++ 2013

Я пытаюсь собрать Boost::Locale (версия Boost 1.56), используя инструкции «Building Boost.Locale». Во-первых, несколько месяцев назад я успешно установил полную библиотеку Boost, которая создала несколько файлов Boost::Locale .dll и .lib:

boost_locale-vc120-mt-1_56.dll
boost_locale-vc120-mt-1_56.lib
boost_locale-vc120-mt-gd-1_56.dll
boost_locale-vc120-mt-gd-1_56.lib

Сегодня я скачал ICU4C 53.1 и собрал его (как отладочный, так и релизный). Я добавил следующий каталог в путь к моему компьютеру:

d:\icu\bin

Затем я провел тесты ICU, и они прошли нормально.

Затем я попытался связать Boost::Locale с ICU и сделал следующее, как указано в инструкциях по установке Locale:

В командной строке я набрал:

.\bjam -sICU_PATH=d:\icu --with-locale stage

Он указывал, что он строится, и на экране отображалось «... терпение ... найдено 1214 целей ...».

Вот результаты D:\boost

boost_locale-vc120-mt-1_56.dll
boost_locale-vc120-mt-1_56.lib
boost_locale-vc120-mt-gd-1_56.dll
boost_locale-vc120-mt-gd-1_56.lib
56_0\bin.v2\config.log:

...found 1 target...
...updating 1 target...
config-cache.write bin.v2\project-cache.jam
...updated 1 target...

На данный момент я не знаю, какая «цель» была обновлена, поэтому я создал небольшое тестовое приложение, используя get_all_backends(), чтобы увидеть, какие серверные части поддерживаются. К сожалению, в списке были только winapi и std.

Может кто-нибудь подсказать, что могло пойти не так?

ОБНОВЛЕНИЕ

При открытии файла джема Locale:

searched-lib icudt : :  <search>$(ICU_PATH)/lib
                        <name>icudata
                        <link>shared
                        <runtime-link>shared ;

Я не уверен в этом, но приведенный выше фрагмент относится к icudt, и я заметил, что к файлам dll добавлена ​​версия ICU, то есть: icudt

Я собираюсь обновить ссылки, чтобы они соответствовали добавленной версии, то есть: icudt53, и посмотреть, что произойдет.


person Caroline Beltran    schedule 23.09.2014    source источник


Ответы (1)


У меня Boost Locale работает нормально, но по какой-то причине я никогда не мог сделать это, используя инструкции Boost Locale. Если инструкции по установке Boost Locale вам подходят, хорошо. Если нет, вы можете сделать то, что сделал я, и сделать полную перестройку Boost.

Далее предполагается, что вы правильно собрали ICU и включили его в свой путь.

  1. смените каталог для повышения root, например: d:\boost_1_56_0

  2. тип: бутстрап

  3. bjam -sICU_PATH=d:\icu --toolset=msvc-12.0 --build-type=полный этап

Вышеупомянутое сработало просто отлично для меня. Только не забудьте указать версию VC++, в моем случае выше 12.0.

person Caroline Beltran    schedule 21.10.2014
comment
У меня также возникли проблемы со сборкой boost::locale 1.57.0 с ICU 54.1. После указания каталога с помощью -sICU_PATH и запуска bjam я получаю сообщение о том, что выполняется проверка конфигурации... icu : нет, icu (lib64): no Похоже, он не обнаруживает библиотеку... Я попытаюсь пересобрать всю библиотеку вместо просто boost::locale, чтобы увидеть, имеет ли это какое-то значение - person ChrisPeterson; 26.01.2015
comment
@ChrisPeterson, указание sICU_PATH и создание всей библиотеки было единственным способом, который сработал для меня. Убедитесь, что у вас есть встроенный ICU заранее. Я делал это несколько раз на нескольких ПК, и это определенно работает. - person Caroline Beltran; 26.01.2015