Eclipse 错误:在android ndk中构建libunwind时需要lo注册
我想使用ndk r10d从eclipse上的Android源代码构建libunwind。 但是我在编译“Gresume.c”时失败了,在asm代码中也失败了。 我不能理解asm代码,我搜索了任何地方都找不到有同样问题的人,所以我希望有人能帮助我 代码的错误行是:Eclipse 错误:在android ndk中构建libunwind时需要lo注册,eclipse,android-ndk,arm,libunwind,Eclipse,Android Ndk,Arm,Libunwind,我想使用ndk r10d从eclipse上的Android源代码构建libunwind。 但是我在编译“Gresume.c”时失败了,在asm代码中也失败了。 我不能理解asm代码,我搜索了任何地方都找不到有同样问题的人,所以我希望有人能帮助我 代码的错误行是: asm __volatile__ ( "ldmia %0, {r4-r12, lr}\n" "mov sp, r12\n" "bx lr\n" : : "r" (regs) , "m" (*(struct regs_over
asm __volatile__ (
"ldmia %0, {r4-r12, lr}\n"
"mov sp, r12\n"
"bx lr\n"
: : "r" (regs) ,
"m" (*(struct regs_overlay *)regs)
);
错误输出:
asm __volatile__ (
"ldmia %0, {r4-r12, lr}\n"
"mov sp, r12\n"
"bx lr\n"
: : "r" (regs) ,
"m" (*(struct regs_overlay *)regs)
);
[armeabi]Compile thumb:MyBacktrace您似乎在构建thumb代码,因此我猜您看到这一点是因为您针对的架构版本不正确。传统上,大多数Thumb指令只能使用“低寄存器”
r0-r7
——一种能够移动“高寄存器”(即这里的r8-r12、r14
)的Thumb版本的ldmia
,直到ARMv7*才出现。据我所知,Android的最低公分母仍然是ARMv5,因此,如果您在默认情况下以ARMv5为目标,那么汇编程序将拒绝在该指令集版本中不可能的事情
将构建设置更改为目标ARMv7或仅作为ARM代码而不是Thumb进行构建,应将相关选项传递给汇编程序,以便它可以找到该指令的适当编码
*从技术上讲,是ARMv6T2,但我非常确定ARM1156在Android环境中不相关。简短的解决方案,将代码放在一个不同的.s文件中,开头有以下内容:
.thumb
.syntax unified
但我还是不明白为什么它会起作用