我的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中都不能用汇编程序编译。
这个问题的解决方案是什么?
答案 0 :(得分:2)
Android通常在ARM体系结构上运行,我猜想你的Linux在x86 / AMD64上运行,因为你还没有指定。汇编代码(几乎可以肯定在.asm文件中)在不同的体系结构之间是不可移植的。
您需要使用可在ARM上运行的代码替换.asm文件的内容。如果删除该文件仍然给您相同的错误,那么在C ++源文件中查找任何内联汇编代码。错误消息(在发布问题时应始终完全复制粘贴)应指定导致错误的文件和行号。