[英]Error: lo register required when build libunwind in android ndk
我想在 Eclipse 中使用 ndk r10d 从 Android 源代码构建 libunwind。 但是我在编译 "Gresume.c" 时失败了,它在 asm code 上也失败了。 我看不懂汇编代码,我搜索了任何地方都找不到有同样问题的人,所以我希望有人能帮助我。
错误代码行是:
asm __volatile__ (
"ldmia %0, {r4-r12, lr}\n"
"mov sp, r12\n"
"bx lr\n"
: : "r" (regs) ,
"m" (*(struct regs_overlay *)regs)
);
错误输出:
[armeabi] 编译拇指:MyBacktrace <= Gresume.c /var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s:汇编程序消息:/var/folders/g7/9gd3cwy96js0fj0s0cc:/var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s : 需要注册 -- `ldmia r2,{r4-r12,lr}' make: *** [obj/local/armeabi/objs/MyBacktrace/libunwind/src/arm/Gresume.o] 错误 1
完整代码可以在下面的链接中找到。
您似乎正在构建 Thumb 代码,所以我猜您看到这一点是因为您针对的是错误的架构版本。 传统上,大多数 Thumb 指令只能使用“低寄存器” r0-r7
- 能够移动“高寄存器”(即r8-r12, r14
此处)的ldmia
的 Thumb 版本直到 ARMv7 *才存在。 据我所知,Android 的最低公分母仍然是 ARMv5,所以如果你默认针对它,那么汇编器将拒绝在该指令集版本中不可能的事情。
将您的构建设置更改为目标 ARMv7,或者只是构建为 ARM 代码而不是 Thumb,应该将相关选项传递给汇编程序,以便它可以为该指令找到合适的编码。
* 技术上是 ARMv6T2,但我很确定 ARM1156 与 Android 上下文无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.