я следующая функция в моем файле нативной lib.cpp:Android вызова функции C++ получать UnsatisfiedLinkError
JNIEXPORT jlong JNICALL
Java_com_example_z_myapplication_MainActivity_convert32to64(JNIEnv *env, jobject instance,
jlong l) {
// TODO
l = l + 76561197960265728L;
return l;
}
В моей MainActivity.java:
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
public static native long convert32to64(long l);
...
}
У меня есть CMakeList.txt:
cmake_minimum_required(VERSION 3.4.1)
# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add.library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.
add_library(# Specifies 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/cpp/native-lib.cpp)
Однако я получаю эту ошибку:
java.lang.UnsatisfiedLinkError: No implementation found for long com.example.z.myapplication.MainActivity.convert32to64(long) (tried Java_com_example_z_myapplication_MainActivity_convert32to64 and Java_com_example_z_myapplication_MainActivity_convert32to64__J)
Может ли кто-нибудь сказать мне, что здесь не так?
Я только что добавил extern «C», он все еще говорит об ошибке –
@TomDawn - это общая библиотека, которая должным образом перекомпилирована и доступна ли ей кодом Java во время выполнения? помните, что образец андроида предлагает прокомментировать собственный модуль lib после его компиляции. – nandsito
Я просто добавляю extern «C» и запускаю клик для запуска в симуляторе. Не могли бы вы рассказать мне, как перекомпилировать его, пожалуйста? Извините, возможно, это глупый вопрос –