Как я могу скомпилировать 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)