2023-01-19 462
我正在使用Android Studio在ARM64-v8a上构建一个Android应用程序,该应用程序可以要求组装功能.
在线搜索了很多信息之后,我仍然无法处理此问题.
我的CMakeList.txt如下:
cmake_minimum_required(VERSION 3.4.1)
enable_language(ASM)
set(can_use_assembler TRUE)
set(CMAKE_VERBOSE_MAKEFILE on)
#add_definitions(-DANDROID -DNDEBUG -DOC_ARM_ASM)
set_source_files_properties(multiple.s PROPERTIES COMPILE_FLAGS "-x
assembler-with-cpp")
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp
src/main/cpp/multiple.s
)
multiple.s的代码为
.session .text
.align 2
.global armFunction
.type armFunction, %function
armFunction:
@ Multiply by 10. Input value and return value in r0
stmfd sp!, {fp,ip,lr}
mov r3, r0, asl #3 @ r3=r0<<3=r0*8
add r0, r3, r0, asl #1 @ r0=r3+r0<<1=r0*8+r0*2=r0*10
ldmfd sp!, {fp,ip,lr}
bx lr
.size armFunction, .-armFunction
native-lib.cpp的代码如下:
extern "C"
int armFunction(int);
JNIEXPORT jstring JNICALL
Java_com_example_zyf_testarm_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++ ";
int x = 1;
char info[1024] = "";
x = x + armFunction(10);
sprintf(info,"%d",x);
return env->NewStringUTF(info); //hello.c_str()
}
和错误消息是
错误:未知指令
.session .Text错误:声明开始时意外令牌
@乘以10.输入值和返回R0中的值
这些只是错误消息的一部分.实际上,它表明multiple.s中的每个指令is unknown.
有人指出问题可能是case sensitive.因此,我尝试使用另一个名为main_asm.S的文件.
main_asm.S的代码如下:
.text
.global asm_main
asm_main:
mov r0, #1
bx lr
问题仍然存在:
未知指令
我提出了另一个问题问题链接.
我认为问题是由相同原因引起的.也许我的clang工作不好?我不知道,请帮忙:)
非常感谢您帮助我解决这个问题:)
bx lr和寄存器r0..r15是32位的臂,而不是Aarch64/arm64-V8A. ARM64寄存器是X0..31(且其低半部分是W0..31),您用ret返回(br的别名)
确保64位构建不会尝试构建32位ASM源文件.
或者,如果您确实有32位ASM源,请确保只做32位构建.
我与Android Studio(v3.1.2)(v3.1.2)一起遇到了同样的问题”未知令牌/指令/…”,并使用Abifilters(在App/build.gradle中)解决了它,但没有引用NDK:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags ""
abiFilters 'armeabi-v7a'
}}}
...
}
(也许更改ARM64-V8A的ARMEABI-V7A)
(您可以在此处查看项目: https://github.com/denisb/genisb/genisb/gperf )
以上所述是小编给大家介绍的在Android Studio上使用ARM64-V8A的汇编语言,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25808.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态