收到错误:将我的 c++ 代码从 Linux 移植到 android 时'asm'中的操作数约束不一致

Getting error: inconsistent operand constraints in an 'asm' while porting my c++ code from linux to android

本文关键字:asm 不一致 约束 操作数 android 我的 错误 c++ 代码 Linux      更新时间:2023-10-16

我的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中都不能用汇编程序。

这个问题的解决办法是什么?

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

您需要将.asm文件的内容替换为可以在ARM上运行的代码。如果删除该文件仍然会出现同样的错误,那么在C++源文件中查找任何内联程序集代码。错误消息(发布问题时应始终完整、准确地复制粘贴)应指定导致错误的文件和行号。