Building boost 1.70 с поддержкой ICU

Я пытаюсь собрать Boost 1.70 с поддержкой ICU. Для этого я некоторое время назад собрал ICU (версия 61.1). В нашей внутренней системе у меня есть такая структура каталогов для ICU, и я не могу ее быстро изменить, потому что несколько компонентов используют эту библиотеку и ожидают библиотеки из этой структуры каталогов:

...\icu\lib (for x86 version of lib files)
...\icu\bin (for x86 version of dll files)

...\icu\lib64 (for x64 version of lib files)
...\icu\bin64 (for x64 version of dll files)

...\icu\include (include headers files for icu)

Итак, после сборки ICU я поместил файлы в соответствующие каталоги.

Теперь я хочу собрать boost 1.70 с поддержкой ICU, поэтому я использовал эту команду сборки в самостоятельно написанном пакетном сценарии (здесь, в качестве примера, 32 бита):

set "PATH_TO_ICU=.....\icu"
...
if not exist "%PATH_TO_ICU%" (
    echo "Error: Could not find path to icu. Was looking in '%PATH_TO_ICU%'"
    pause
    exit /b 1
)
...
:: debug 32bit / static
b2 --build-type=complete toolset=msvc-14.1 variant=debug threading=multi link=static -sICU_PATH="%PATH_TO_ICU%" -sICU_LINK="%PATH_TO_ICU%\lib" include="%PATH_TO_ICU%\include"

Но вывод во время сборки показывает мне это

- has_icu builds           : no
...
- icu                      : no
- icu (lib64)              : no

Дополнительная информация: я создаю это с помощью Visual Studio 2017.

Итак, что мне здесь не хватает?

Изменить

Я заглянул в файл boost_root\bin.v2\config.log и увидел такие строки

    Line 132: LINK : fatal error LNK1181: cannot open input file '....\icu\lib.obj'

что, возможно, объясняет, почему b2 не мог правильно видеть ICU.


person devopsfun    schedule 29.07.2019    source источник
comment
У меня почти такая же проблема (просто немного разные версии Boost и ICU). Вы когда-нибудь решали это?   -  person codesniffer    schedule 29.01.2021


Ответы (1)


Для Windows я бы исследовал Microsoft VCPKG. Раньше я собирал Boost с нуля с поддержкой zlib и bzip2, но обнаружил, что vcpkg намного проще. Вам также не нужно держать vcpkg рядом. После сборки boost или любой другой сторонней библиотеки экспортируйте boost (используя команду экспорта vcpkg), и у вас будет копия, которую вы сможете использовать где угодно. Vcpkg может создавать 32- или 64-битные пакеты, статические и общие. На самом деле я настраиваю триплеты vcpkg для создания статической библиотеки, которая связывается с общим crt, поэтому я не беспокоюсь о DLL. Дело в том, что vcpkg может справиться со всеми вашими потребностями. Фактически, для ускорения вы можете создавать только те компоненты, которые хотите, если хотите.

person DannyK    schedule 29.07.2019