获取错误:' asm'中的操作数限制不一致同时将我的c ++代码从linux移植到android

时间:2014-04-25 09:31:13

标签: android c++ linux assembly

我的C ++代码在我的Linux x86机器上运行正常但是在将相同的代码移植到运行相同x86架构的Android后,我收到错误:“asm'”中的操作数限制不一致。

在我的android.mk文件中有两个源文件,一个是.cpp文件,另一个是.asm文件。我认为.asm文件没有被编译,因为如果我从android.mk删除它,我仍然会得到相同的错误。 我在.cpp文件上收到错误,如下所示:

for(int reg = 0; reg <= max; reg++) {
    asm ("cpuid"
             : "=a" (eax),
               "=b" (ebx),
               "=c" (ecx),
               "=d" (edx)
             : "a" (reg), getting error on this line.
           "c" (0));

如果我尝试使用nasm单独编译.asm文件,它会成功编译,但在Linux和android中都不能用汇编程序编译。

这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

Android通常在ARM体系结构上运行,我猜想你的Linux在x86 / AMD64上运行,因为你还没有指定。汇编代码(几乎可以肯定在.asm文件中)在不同的体系结构之间是不可移植的。

您需要使用可在ARM上运行的代码替换.asm文件的内容。如果删除该文件仍然给您相同的错误,那么在C ++源文件中查找任何内联汇编代码。错误消息(在发布问题时应始终完全复制粘贴)应指定导致错误的文件和行号。