不久前,我通过阅读 boost 1.53.0 和 1.54.0 之间每个 jam 文件的差异来解决这个问题,这是一项艰巨的任务。我本来打算发布一个补丁,但只是找到原因花了我没有的时间,现在我不记得它是什么了。
无论如何,我确实记得我过去常常在最后期限前完成的快速解决方案。对于 boost 1.54.0,为 bjam 提供“toolset=darwin-[version]~iphonesim”参数。你也可以给 arm builds toolset=darwin-[version]~iphone,虽然它不需要它。
例如,使用 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
如果这对您不起作用,请告诉我,如果我有时间,我会从备份中获取旧的构建目录,看看我是否还有其他事情要做。上面的命令来自我的 histfile。
此外,仅供参考,要使仅针对 v7 和 v7s 且同样构建 ICU 库的 arm 构建通过 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
;