我正在使用Android NDK做一个小项目,我必须插入一些ARM架构的asm代码。除了asm之外,其他的都可以正常工作,但是asm代码告诉我操作数1应为整数寄存器当编译简单的代码时,如第一个月那么,问题是什么?我的计算机是否尝试编译x86_64而不是ARM?如果是这样,我应该如何改变这一点?另外,我尝试了x86_64等价的arm("mov rax, rax");,但错误是相同的。
arm("mov rax, rax");
m528fe3b1#
所有的C源代码都是针对APP_ABI中提到的每个架构编译的。因此,没有必要怀疑为什么x64编译器不能理解ARM汇编,反之亦然。不要使用内联程序集。最好是将所有汇编文件放到专用的*.S源中,这些源将由as处理(NDK工具链有)。这些程序集源应该放在适当的文件夹中,如arch-arm/、arch-x86/。然后你应该把它们正确地添加到Android.mk中:
APP_ABI
*.S
as
arch-arm/
arch-x86/
Android.mk
LOCAL_SRC_FILES := arch-$(TARGET_ARCH)/my_awesome_code.S
字符串$(TARGET_ARCH)有助于以正确和无痛的方式解析到适当源的路径。另外,独立汇编比内联汇编提供了更多的能力。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器而异,因为它不是任何标准的一部分。
$(TARGET_ARCH)
1条答案
按热度按时间m528fe3b1#
所有的C源代码都是针对
APP_ABI
中提到的每个架构编译的。因此,没有必要怀疑为什么x64编译器不能理解ARM汇编,反之亦然。不要使用内联程序集。最好是将所有汇编文件放到专用的
*.S
源中,这些源将由as
处理(NDK工具链有)。这些程序集源应该放在适当的文件夹中,如arch-arm/
、arch-x86/
。然后你应该把它们正确地添加到Android.mk
中:字符串
$(TARGET_ARCH)
有助于以正确和无痛的方式解析到适当源的路径。另外,独立汇编比内联汇编提供了更多的能力。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器而异,因为它不是任何标准的一部分。