Comment puis-je comstackr Boost 1.54.0 (1.54) pour le simulateur iOS (6.1) sur OS X 10.8.4?

J'ai réussi à comstackr plusieurs des bibliothèques Boost et à créer un framework pour OS X, iOS et le simulateur iOS en utilisant ce script: https://github.com/wuhao5/boost/blob/188e905626dbd522f65950102ed0c8ce77cb28e8/boost.sh basé sur le travail de Peter Goodliffe ici: http://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html avec Boost 1.53.0 en utilisant clang et en liant avec libc ++.

Le script échoue lors de la compilation pour le simulateur iOS avec Boost 1.54.0 avec l'erreur suivante: /bin/sh: line 1: -ftemplate-depth-128: command not found .

J'ai creusé un peu et voici ce que je sais:

  • Dans boost.sh, les options du simulateur iOS bjam et du compilateur incluent "-arch i386"
  • Les notes de version pour Boost 1.54.0 indiquent que "Boost ne prend plus en charge le processeur cible 80386"
  • Boost 1.53.0 semble bien se comstackr pour OS X, iOS et le simulateur iOS en utilisant le même script
  • Boost 1.54.0 semble se comstackr correctement pour OS X et iOS en utilisant le même script

Voici ce que je pense savoir:

  • Lorsque vous passez "-d13" à bjam (pour générer des informations de debugging), il apparaît que la variable "CONFIG_COMMAND" n'est pas définie lors de la construction du simulateur iOS. Pour les autres configurations, cette variable est définie sur le path d'access à clang et inclut les options du compilateur. Pour le simulateur, il est vide, ce qui conduit à l'erreur ci-dessus, car lorsque bjam tente d'exécuter le compilateur en utilisant cette variable, il exécute à la place des options ajoutées qui commencent par la profondeur du template. Par conséquent, la variable CONFIG_COMMAND ne semble pas être définie correctement provoquant l'échec.

Je n'ai aucune idée pourquoi ce n'est pas réglé car je ne sais pas assez sur le système de construction Boost pour passer au crible le rest de la sortie de 100 + Mo générée avec le drapeau "-d13". Je suspecte une incompatibilité avec l'option "-arch i386" a été introduite avec 1.54.0. J'ai essayé de changer cela en "-arch i486" et "-arch x86_32" mais le même problème se produit.

Est-ce que quelqu'un d'autre a eu du succès avec ça? Je voudrais utiliser Boost.Log qui est la raison pour laquelle je tente même cela.

Je l'ai construit avec le boost.sh donné ici en changeant la ligne dans 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 boost.sh modifié avec Boost pkg download et déballer. Juste besoin de courir et tout est fait!

 Boost 1.54 MacOSx 10.8.4 Xcode 4.6.3 

Je l'ai compris il y a un moment en lisant les différences de chaque file de confiture entre boost 1.53.0 et 1.54.0, ce qui était une entreprise sérieuse. Je voulais postr un patch, mais juste find la cause prenait du time que je n'avais pas, et maintenant je ne me souviens pas de ce que c'était.

En tout cas, je me souviens de la solution rapide que j'avais l'habitude d'avancer et de respecter une date limite. Il est, pour boost 1.54.0, de fournir à bjam l'argument "toolset = darwin- [version] ~ iphonesim". Vous pouvez également donner des sets de arm toolset = darwin- [version] ~ iphone, bien qu'il n'en ait pas besoin.

Par exemple, en utilisant le 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 

Si cela ne fonctionne pas pour vous, faites le moi savoir et si j'ai un moment, je récupèrerai l'ancienne sauvegarde de build dir pour voir s'il y a autre chose que j'ai fait. La command ci-dessus provient de mon histfile.

En outre, FYI, pour faire passer la vérification ICU pour les builds de arm qui ne ciblent que v7 et v7 avec des bibliothèques ICU construites de la même manière, appliquez le patch suivant à 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 ; 

En outre, plus généralement, vous pouvez avoir besoin de quelque chose comme ce qui suit dans votre ~ / 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 : <ssortingper> <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 : <ssortingper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer : <architecture>x86 <target-os>iphone ; 

Aussi, pour boost :: context pour build correctement pour le simulateur, j'ai dû append ce qui suit à 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 ; 

Basé sur les réponses dans ce post et les scripts créés par d'autres personnes, j'ai mis en place un script bash qui construit un framework boost pour iOS et OSX avec Xcode 5, ce qui signifie pour armv7, armv7s, arm64, i386 et x86_64.

Consultez-le ici https://github.com/mgrebenets/boost-xcode5-iosx .

Je sais à coup sûr qu'il construit boost à partir de 1.49.0

Pour ceux qui sont intéressés à se tenir au courant:

Vous pouvez utiliser le BOOST 1.57.0 avec les bibliothèques et en-têtes statiques ofxiOSBoost: https://github.com/danoli3/ofxiOSBoost

Sorties pour libc ++ (c ++ 11), libstdc ++.

Tous les scripts de construction sont dans le dossier / scripts (mise à jour du script Peter Goodliffe)