为设备编译 Boost 1.54 XCode5 - 致命错误:后端错误:符号“___umodsi3”不能在减法表达式中未定义
Posted
技术标签:
【中文标题】为设备编译 Boost 1.54 XCode5 - 致命错误:后端错误:符号“___umodsi3”不能在减法表达式中未定义【英文标题】:Compiling Boost 1.54 XCode5 for device - fatal error: error in backend: symbol '___umodsi3' can not be undefined in a subtraction expression 【发布时间】:2013-10-08 15:56:12 【问题描述】:我已经能够使用 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-多/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 为设备进行编译,之前没有问题...
谢谢! 丹尼尔
【问题讨论】:
你在这方面取得了进展吗?我遇到了同样的错误,还没有找到任何解决方案。只有少数来源再次提到了这一点,例如 llvm.org/bugs/show_bug.cgi?id=10992 或 mail-archive.com/cfe-users@cs.uiuc.edu/msg00402.html 或 answer.techwikihow.com/830119/… 【参考方案1】:我可能已经找到了答案。使用
<compileflags>-mno-thumb
代替:
<compileflags>-mthumb
现在为我工作。
【讨论】:
以上是关于为设备编译 Boost 1.54 XCode5 - 致命错误:后端错误:符号“___umodsi3”不能在减法表达式中未定义的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu14.04下安装 boost (boost_1.54 最简单的方法)
在 Xcode 5 上使用 Boost - Apple LLVM 5.0
为在 armv7s 上运行的 iOS 设备编译 Boost c++ 库
为 Windows Embedded Compact 7 编译 boost 库