我已经能够使用 XCode 5 为 iOS 7.0 模拟器成功编译 boost 1.54,但是当尝试为设备编译时,出现了这个奇怪的 clang 失败:
darwin.compile.c++ bin.v2/libs/atomic/build/darwin-7.0~iphone/release/architecture-arm/link-static/macosx-version-iphone-7.0/target-os-iphone/threading-multi/lockpool .o 致命错误:后端错误:不能在减法表达式中取消定义符号'___umodsi3' clang:错误:clang 前端命令失败,退出代码为 70(使用 -v 查看调用)Apple LLVM 版本 5.0(clang-500.2. 76)(基于 LLVM 3.3svn)目标:arm-apple-darwin12.5.0 线程模型:posix
这是我的 user-config.jam 设置:
using clang : : : <cxxflags>"-std=c++11 -stdlib=libc++" <linkflags>"-stdlib=libc++" ;
using darwin : 7.0~iphone
: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
: <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
<compileflags>"-arch armv7"
<compileflags>"-arch armv7s"
<compileflags>-mthumb
<compileflags>-fvisibility=hidden
<compileflags>-fvisibility-inlines-hidden
<compileflags>-std=c++11
<compileflags>-stdlib=libc++
<compileflags>-miphoneos-version-min=5.1
<compileflags>-D_LITTLE_ENDIAN
<compileflags>"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk"
: <architecture>arm <target-os>iphone
;
using darwin : 7.0~iphonesim
: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
: <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
<compileflags>"-arch i386"
<compileflags>-fvisibility=hidden
<compileflags>-fvisibility-inlines-hidden
<compileflags>-std=c++11
<compileflags>-stdlib=libc++
<compileflags>-miphoneos-version-min=5.1
<compileflags>-D_LITTLE_ENDIAN
<compileflags>"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk"
: <architecture>x86 <target-os>iphone
;
重现的详细步骤:
1. Download and extract the latest sources for boost 1.54
2. Create a user-config.jam in user's home directory (w text above).
3. Run ./bootstrap.sh in the boost directory
4. Run
./b2 toolset=darwin-7.0~iphone architecture=arm target-os=iphone macosx-version=iphone-7.0 threading=multi linkflags=-stdlib=libc++ define=_LITTLE_ENDIAN link=静态安装
这将导致上述错误。
为了比较,在为模拟器编译时使用以下行:
./b2 工具集=darwin-7.0~iphonesim architecture=x86 target-os=iphone macosx-version=iphone-7.0 threading=multi linkflags=-stdlib=libc++ link=static install
这可以正常工作并正确生成用于模拟器的 boost 库。
有人会对可能导致这种情况的原因提出建议吗?是clang编译器问题还是我使用的设备编译不正确?我已经能够使用 XCode 4.x 为设备编译之前没有问题...
谢谢!丹尼尔