Как я могу скомпилировать Boost 1.54.0 (1.54) для iOS-симулятора (6.1) на OS X 10.8.4?

Мне удалось скомпилировать несколько библиотек Boost и создать фрейм для использования с OS X, iOS и симулятором iOS, используя этот script: https://github.com/wuhao5/boost/blob/188e905626dbd522f65950102ed0c8ce77cb28e8/boost.sh, основанный на Питере Гудлиффе, работает здесь: http://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html с Boost 1.53.0, используя clang и ссылку на libС++.

Ошибка script при компиляции для симулятора iOS с Boost 1.54.0 со следующей ошибкой: /bin/sh: line 1: -ftemplate-depth-128: command not found.

Я довольно много рылся, и вот что я знаю:

  • В boost.sh iOS симулятор bjam и параметры компилятора включают в себя "-arch i386"
  • В примечаниях к выпуску для Boost 1.54.0 указано, что "Boost больше не поддерживает целевой процессор 80386"
  • Boost 1.53.0, похоже, отлично компилируется для OS X, iOS и симулятора iOS, используя тот же script
  • Boost 1.54.0, похоже, отлично компилируется для OS X и iOS, используя тот же самый script

Вот что, я думаю, знаю:

  • При передаче "-d13" в bjam (для создания отладочной информации) появляется, что переменная "CONFIG_COMMAND" не устанавливается при создании для симулятора iOS. Для других конфигураций эта переменная устанавливается в путь к clang и включает параметры компилятора. Для симулятора он пуст, который, как мне кажется, приводит к ошибке выше, как когда bjam пытается запустить компилятор с использованием этой переменной, вместо этого он запускает некоторые дополнительные функции, которые начинаются с глубины шаблона. Следовательно, переменная CONFIG_COMMAND не отображается правильно, что приводит к ее сбою.

Я понятия не имею, почему он не устанавливается, поскольку я недостаточно знаю о системе сборки Boost для просеивания остальной части вывода 100 + МБ, сгенерированного с помощью флага -d13. Я подозреваю, что несовместимость с опцией "-arch i386" была введена с 1.54.0. Я попытался изменить это на "-arch i486" и "-arch x86_32", но та же проблема возникает.

Кто-нибудь еще имел успех? Я бы хотел использовать Boost.Log, поэтому я даже пытаюсь это сделать.

Ответ 1

Я получил его с помощью boost.sh здесь, изменив строку в buildBoostForiPhoneOS()

./bjam -j16 --build-dir=iphonesim-build --stagedir=iphonesim-build/stage --toolset=darwin architecture=x86 target-os=iphone macosx-version=iphonesim-${IPHONE_SDKVERSION} link=static stage

до

./bjam -j16 --build-dir=iphonesim-build --stagedir=iphonesim-build/stage --toolset=darwin-${IPHONE_SDKVERSION}~iphonesim architecture=x86 target-os=iphone macosx-version=iphonesim-${IPHONE_SDKVERSION} link=static stage

Изменено boost.sh с загрузкой и распаковкой Boost pkg. Просто нужно бежать и все сделано!

Boost 1.54
MacOSx 10.8.4
Xcode 4.6.3

Ответ 2

Я подумал об этом некоторое время назад, прочитав разницу между каждым файлом джем между boost 1.53.0 и 1.54.0, что было серьезным делом. Я хотел опубликовать патч, но просто найти причину потребовалось время, которое у меня не было, и теперь я не помню, что это было.

Во всяком случае, я помню быстрое решение, которое я использовал, чтобы двигаться вперед и соответствовать сроку. Это означает, что для boost 1.54.0 для подачи bjam аргумент "toolset = darwin- [version] ~ iphonesim". Вы также можете предоставить arm builds toolset = darwin- [version] ~ iphone, хотя он ему не нужен.

Например, используя SDK iOS 6.1:

./b2 toolset=darwin-6.1~iphonesim architecture=x86 target-os=iphone macosx-version=iphonesim-6.1 link=static variant=debug  define=BOOST_TEST_NO_MAIN define=BOOST_TEST_ALTERNATIVE_INIT_API linkflags="-stdlib=libc++" -j2 -d+2 -sICU_PATH=/usr/local/icu --without-python --layout=tagged --build-dir="/Users/wix/Desktop/boost_1_54_0/_build/simd_build" --stagedir="/Users/wix/Desktop/boost_1_54_0/_build/simd_stage" --debug-configuration stage

Если это не сработает для вас, дайте мне знать, и если у меня есть момент, я получу резервную копию старого сборщика, чтобы увидеть, есть ли что-нибудь еще. Команда выше - из моего файла histfile.

Кроме того, FYI, чтобы сделать проход ICU для сборки рук, нацеленных только на v7 и v7 с библиотеками ICU, также примените следующий патч к tools/build/v2/tools/darwin.jam:

460,464c460,465
<             if $(instruction-set) {
<                 options = -arch$(_)$(instruction-set) ;
<             } else {
<                 options = -arch arm ;
<             }
---
>             #if $(instruction-set) {
>             #    options = -arch$(_)$(instruction-set) ;
>             #} else {
>             #    options = -arch arm ;
>             #}
>       options = -arch armv7 ;

Кроме того, в общем случае вам может понадобиться что-то вроде следующего в ~/user-config.jam:

using clang : : : <cxxflags>"-std=c++11 -stdlib=libc++" <linkflags>"-stdlib=libc++" ;

using darwin : 6.1~iphone
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -arch armv7s -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
   : <architecture>arm <target-os>iphone
   ;

using darwin : 6.1~iphonesim
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
   : <architecture>x86 <target-os>iphone
   ;

Кроме того, для boost:: context для правильной сборки для симулятора мне нужно добавить следующее в libs/context/build/Jamfile.v2:

alias asm_context_sources
   : asm/make_i386_sysv_macho_gas.S
     asm/jump_i386_sysv_macho_gas.S
   : <address-model>32
     <architecture>x86
     <binary-format>mach-o
     <target-os>iphone
     <toolset>darwin
   ;

Ответ 3

Основываясь на ответах в этом сообщении и сценариях, созданных другими людьми, я собрал bash script, который создает среду повышения для iOS и OSX с Xcode 5, что означает для armv7, armv7s, arm64, i386 и x86_64.

Посмотрите здесь https://github.com/mgrebenets/boost-xcode5-iosx.

Я точно знаю, что он увеличивает уровень загрузки, начиная с 1.49.0

Ответ 4

Для тех, кто заинтересован в обновлении:

Вы можете использовать BOOST 1.57.0 с статическими библиотеками и заголовками ofxiOSBoost: https://github.com/danoli3/ofxiOSBoost

Релизы для libС++ (С++ 11), libstdС++.

Все скрипты сборки находятся в папке /scripts (обновлено Peter Goodliffe script)