Boost + ICU, Хинты по сборке |
Здравствуйте, гость ( Вход | Регистрация )
Boost + ICU, Хинты по сборке |
Iron Bug |
24.11.2011, 17:29
Сообщение
#1
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Я тут собирала новые библиотеки. Обнаружила некоторые косяки. Вот хинты для их обхода, если вдруг кому пригодится.
Сборка ICU 4.8.1.1: При сборке с MinGW к сорцам ICU нужно применить небольшой патч для исправление ошибки "undefined symbol _mkdir": В файле toolutil.cpp вот этот #include
меняем на <direct.h>
С остальными компиляторами вроде проблем не наблюдалось. Про кросскомпиляцию ICU читать readme.html в корне сорца! Там всё подробно написано. Сборка нетривиальная, так что лучше сначала прочитать документацию Сборка boost 1.48.0 c ICU 4.8.1.1: Далее, при сборке буста с новым форматом библиотеки ICU нужны дополнительные опции для bjam по сборке с ICU 4.8.1.1: Цитата -sHAVE_ICU=1 -sICU_PATH=путь_до_каталога_установки_ICU -sICU_LINK="-L$ICU_PATH/lib -licuuc48 -licuin48 -licudt48" (Путь до каталога ICU должен быть полный!) Это переопределение библиотек ICU для линковки, так как они теперь называются по-другому. О новых правилах именования написано тут: Цитата Windows: The DLLs you may need for your application are located in bin\icuXX##.dll, where "XX" are two letters (such as "uc" for the "common" library, "in" for the "i18n" library, etc.) and ## is the major and the minor version number (such as 42 for 4.2 / 4.2.0.1 or 4.2.4 ). Either place the DLLs in the same directory as your application's .EXE files, or set the PATH variable to point to the directory containing the ICU DLLs. For compiling applications, add the "include" direcotry (the parent of the "unicode" and "layout" directories) to the include search path. For linking applications, add the "lib" directory to the appropriate path. Other Platforms: For other platforms, the .tgz file unpacks to a "/usr/local" type hierarchy. For system-wide installation, you can unpack all of the files into /usr/local/bin, /usr/local/include, etc. The configuration script /usr/local/bin/icu-config or the similar Makefile include fragment /usr/local/lib/icu/current/Makefile.inc can be used in building applications. При сборке boost 1.48.0 с MinGW в скриптах boost build имеется баг, приводящий к ошибке Цитата error: Duplicate name of actual target: <pstage\lib>libboost_exception-mgw45-mt-1_48.a У меня не было времени детально копаться в скриптах, я выяснила, что обход бага в том, чтобы проставить threading=multi в параметрах сборки. Баг уже известен в переписке по бусту и, скорее всего, скоро будет поправлен. В прочих компиляторах баг не проявляется. Сообщение отредактировал Iron Bug - 25.11.2011, 10:03 |
|
|
Iron Bug |
25.11.2011, 9:19
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
В общем, мне удалось собрать boost 1.48.0 c ICU 4.8.1.1 с MSVC 10.0, c MinGW 4.5.2, и кросскомпиляцией под линём, с MinGW 4.6.х (не помню точно версию).
Вот конфиги для сборки под вендой с MinGW: (я собирала через MSYS) 1. В консоли MSYS: Цитата bootstrap.sh --with-icu=/home/Yana/bin/icu-4.8.1.1 --with-toolset=mingw Может, можно и сразу делать toolset=gcc, но в некоторых конфигурациях он выёживается и лучше потом файл конфигурации руками поправить (см. далее). 2. Редактируем файл project-config.jam: Все имена 'mingw' меняем на 'gcc', добавляем нужные глобальные переменные и т.п. У меня в части определений получилось так: Цитата using gcc : : : <runtime-link>static/dynamic <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG ; (BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG - это я со скоростными таймерами собираю буст) 3. Запускаем сборку: Цитата bjam threading=multi link=shared runtime-link=shared -d2 -j2 --without-python --without-mpi --build-dir=каталог_для_сборки --layout=tagged address-model=32 -sHAVE_ICU=1 -sICU_PATH=полный_путь_до_каталога_установки_ICU -sICU_LINK="-L$ICU_PATH/lib -licuuc48 -licuin48 -licudt48" stage Естественно, runtime-link, link и address-model ставим по своему усмотрению. Главное, оставить threading=multi (см. про баг чуть выше). Ну и если собирать в консоли под вендой будет маленько по-другому: Цитата -sICU_LINK="-L%ICU_PATH%/lib -licuuc48 -licuin48 -licudt48" просто разный синтаксис оформления переменных в скриптах. Собственно, на этом всё. Собирается без проблем. Про кросскомпиляцию под линём пока не пишу: это вряд ли кого заинтересует, а писать там надо дофига. Если будут вопросы - пишите сюда. Сообщение отредактировал Iron Bug - 25.11.2011, 10:03 |
|
|
Текстовая версия | Сейчас: 25.11.2024, 6:52 |