如何在OS X 10.8.4上为iOS模拟器(6.1)编译Boost 1.54.0(1.54)?

我已经成功地设法编译了一些Boost库,并使用这个脚本创build了一个用于OS X,iOS和iOS模拟器的框架: https : //github.com/wuhao5/boost/blob/188e905626dbd522f65950102ed0c8ce77cb28e8/boost.sh基于Peter Goodliffe在这里的工作: http : //goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html Boost 1.53.0使用clang并链接到libc ++。

使用Boost 1.54.0编译iOS模拟器时出现以下错误:脚本失败: /bin/sh: line 1: -ftemplate-depth-128: command not found

我做了相当多的挖掘,这就是我所知道的:

  • 在boost.sh中,iOS模拟器bjam和编译器选项包括“-arch i386”
  • Boost 1.54.0发行说明声明“Boost不再支持80386目标CPU”
  • Boost 1.53.0对于OS X,iOS和使用相同脚本的iOS模拟器似乎可以很好地编译
  • 升压1.54.0似乎编译罚款的OS X和iOS本身使用相同的脚本

这是我想我知道的:

  • 将“-d13”传递给bjam(生成debugging信息)时,在为iOS模拟器构build时,似乎没有设置variables“CONFIG_COMMAND”。 对于其他configuration,此variables设置为clangpath,并包含编译器选项。 对于模拟器来说,它是空的,我相信会导致上面的错误,因为当bjam试图运行编译器使用这个variables,它运行一些附加的选项,以模板深度开始。 因此,CONFIG_COMMANDvariables似乎没有正确设置导致失败。

我不知道为什么它没有被设置,因为我不知道Boost构build系统是否足够筛选通过“-d13”标志生成的100 + MB输出的其余部分。 我怀疑与1.54.0引入的“-arch i386”选项不兼容。 我试着改变这个“-arch i486”和“-arch x86_32”,但同样的问题发生。

有没有其他人有这个成功? 我想使用Boost.Log这就是为什么我甚至试图这样做。

我通过在buildBoostForiPhoneOS()中改变行来build立boost.sh,

 ./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 pkg下载和解压缩修改boost.sh 。 只需要运行,一切都完成了!

 Boost 1.54 MacOSx 10.8.4 Xcode 4.6.3 

我通过阅读1.53.0和1.54.0之间的每一个jam文件的差异来了解这一点,这是一个严肃的事情。 我打算发布一个补丁,但find原因需要时间,我没有,现在我不记得是什么。

无论如何,我确实记得我曾经习惯的快速解决scheme,并在最后期限之前完成。 为了提升1.54.0,为bjam提供“toolset = darwin- [version]〜iphonesim”参数。 你也可以给arm构build工具集= darwin- [version]〜iphone,尽pipe它不需要它。

例如,使用iOS 6.1 SDK:

 ./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 

如果这不适合你,让我知道,如果我有一个时刻,我会得到旧的构build目录备份,看看有没有什么我做的。 上面的命令来自我的histfile。

此外,为了使ICU检查通过只针对v7和v7的ICU检查通过,同时构buildICU库,请将以下修补程序应用于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正确地为模拟器构build,我需要将以下代码添加到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 ; 

基于这篇文章的回复以及其他人创build的脚本,我将一个bash脚本放在一起,这个脚本为Xcode 5构buildiOS和OSX的增强框架,这意味着对于armv7,armv7s,arm64,i386和x86_64。

看看这里https://github.com/mgrebenets/boost-xcode5-iosx

我知道肯定会从1.49.0开始提升

对于那些有兴趣保持最新的人:

您可以使用BOOST 1.57.0与ofxiOSBoost静态库和标头: https : //github.com/danoli3/ofxiOSBoost

libc ++(c ++ 11)和libstdc ++的发布。

所有构build脚本都位于/ scripts文件夹中(更新了Peter Goodliffe脚本)