Я создаю приложение для Android со студией Android на ARM64-v8a
, которое может запрашивать функции сборки.
После поиска большого количества информации в Интернете я все еще не могу решить эту проблему.
Мой 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
является unknown
.
Обновление:
Кто-то указывает, что проблема может быть case sensitive
. Поэтому я попытался использовать другой файл .S
с именем main_asm.S
.
Код main_asm.S
выглядит следующим образом:
.text
.global asm_main
asm_main:
mov r0, #1
bx lr
Проблемы все еще существуют:
Неизвестная инструкция
Обновление:
Я поднимаю еще один вопрос Ссылка на вопрос .
Я думаю, что проблема вызвана той же самой причиной. Может быть, мой clang
не работает? Я не знаю, пожалуйста, помогите:)
Большое спасибо за помощь в решении этой проблемы:)