Сборка Boost.Locale с иконкой для iOS

В настоящее время я пытаюсь собрать Boost.Locale для iOS, но не могу найти библиотеку iconv (я успешно собираю другие части Boost для iOS, такие как thread или же filesystem).

Я пытался позволить Boost.Build найти его сам, я попытался установить ICONV_PATH переменная для указания на iPhoneOS SDK iconv lib. Проверяя Jamfile в Boost.Locale, я наткнулся на это правило:

lib iconv 
  : 
  : <search>$(ICONV_PATH)/lib <link>shared <runtime-link>shared
  :
  : <include>$(ICONV_PATH)/include 
  ;

Вот и я подумала -sICONV_PATH в /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr было бы достаточно, так как этот каталог содержит lib и include папка, содержащая lib и заголовок iconv, но Boost все равно не может его найти и плюет:

iconv (libc)             : no
iconv (separate)         : no
icu                      : no
icu (lib64)              : no
Boost.Locale needs either iconv or ICU library to be built.

Обратите внимание, что я всегда призываю b2 с --reconfigure вариант, и, следовательно, это не результат кэширования предыдущего вызова (который будет иметь конечный (cached) в списке выше.

Итак, есть ли способ правильно указать Boost на реализацию iconv, представленную в iOS SDK? Я хотел бы избежать создания отдельного iconv, если это возможно.

3 ответа

Я столкнулся с похожими проблемами. После некоторых копаний и некоторых красных селедок я узнал, что boost обнаруживает iconv путем компиляции программы has_iconv.cpp. В моем случае (с использованием сценария boost.sh, который многие люди используют для компиляции под iOS), в config.log было много ошибок компиляции, вызванных неправильным синтаксисом using в user-config.jam . Так что проблема - по крайней мере для меня - не в том, чтобы установить ICONV_PATH, а в том, чтобы программа обнаружения вообще компилировалась! Возможно, у вас есть похожая проблема.

Я сделал полное описание поиска в моем блоге, если вам интересно.

Вы должны получить следующий вывод журнала при сборке

Если библиотека iconv не найдена в сборках Darwin/Mac OS X, убедитесь, что не установлено несколько установок iconv, и укажите параметр сборки -sICONV_PATH, чтобы указать правильное расположение библиотеки iconv.

Сначала вам нужно загрузить Bootstrap, где $ICU = корневой каталог ICU и каталог, в котором находятся продукты сборки ICU сборки ("bin/", "include/" и т. Д.):

.\bootstrap --with-icu=$ICU

затем

.\b2 boost.locale.icu=on boost.locale.std=off -sICU_PATH="$ICU" --with-chrono --with-locale --with-system --with-thread link=static stage cxxflags="-miphoneos-version-min=9.0 -stdlib=libc++"

Поздний ответ, но вот рабочая конфигурация, которая поддерживает Boost.Locale на iOS с использованием библиотеки iconv (boost v1_64_0). Реализация доступна по https://github.com/Cogosense/iOSBoostFramework которая использует Makefile для создания инфраструктуры повышения для архитектур armv7, armv7s, arm64, i386 и x86_64.

Для сборки 32-битного ARM создайте user-config.jam со следующим содержимым:

using clang-darwin : arm                                                                                                                                                  
    : xcrun --sdk iphoneos clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch armv7s -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch armv7s"
      <striper>
    ;

архитектура также может быть установлена ​​на armv7, измените значение cxxflags по своему вкусу, но флаг -arch необходим.

ускорение сборки для 32-битной цели iPhone с помощью следующей команды сборки:

BOOST_BUILD_USER_CONFIG=<path-to-arm32-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path) \
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr \
    toolset=clang-darwin-arm \
    target-os=iphone

Для построения 64-битной ARM создайте user-config.jam со следующим содержимым:

using clang-darwin : arm64                                                                                                                                                  
    : xcrun --sdk iphoneos clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch arm64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch arm64"
      <striper>
    ;

ускорение сборки для 64-битной цели iPhone с помощью следующей команды сборки:

BOOST_BUILD_USER_CONFIG=<path-to-arm64-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path) \
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr \
    toolset=clang-darwin-arm64 \
    target-os=iphone

Для сборки 32-битного симулятора x86 создайте user-config.jam со следующим содержимым:

using clang-darwin : x86                                                                                                                                                  
    : xcrun --sdk iphonesimulator clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch i386 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11  -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch i386"
      <striper>
    ; 

сборка для 32-битного iPhone Simulator с помощью следующей команды сборки:

BOOST_BUILD_USER_CONFIG=<path-to-x86-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr \
    toolset=clang-darwin-i386 \
    target-os=iphone

Для сборки 64 -битного симулятора x86 создайте user-config.jam со следующим содержимым:

using clang-darwin : x86_64                                                                                                                                                 
    : xcrun --sdk iphonesimulator clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch x86_64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11  -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch x86_64"
      <striper>
    ; 

сборка для 64-битного iPhone Simulator с помощью следующей команды сборки:

BOOST_BUILD_USER_CONFIG=<path-to-x86_64-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr \
    toolset=clang-darwin-x86_64 \
    target-os=iphone
Другие вопросы по тегам