1

我已经能够使用 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 为设备编译之前没有问题...

谢谢!丹尼尔

4

1 回答 1

0

我可能已经找到了答案。利用

<compileflags>-mno-thumb

代替:

<compileflags>-mthumb

现在为我工作。

于 2014-09-11T09:33:31.327 回答