Eclipse 错误:在android ndk中构建libunwind时需要lo注册

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

我想使用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_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
但我还是不明白为什么它会起作用