java.lang.UnsatisfiedLinkError:由于未加载库,未找到任何实现

java.lang.UnsatisfiedLinkError:由于未加载库,未找到任何实现,java,android,android-ndk,java-native-interface,jniwrapper,Java,Android,Android Ndk,Java Native Interface,Jniwrapper,我正在尝试将本机编写的共享库集成到我的应用程序中,但它说无法加载jniLibs和其他库中的.so文件 这是C文件 #include <string.h> #include <jni.h> #include <dummy.h> JNIEXPORT jstring Java_com_example_hellojni_HelloJni_DummyInit(JNIEnv*env, jobject thiz) { dummy *handle; cha

我正在尝试将本机编写的共享库集成到我的应用程序中,但它说无法加载jniLibs和其他库中的.so文件

这是C文件

#include <string.h>
#include <jni.h>
#include <dummy.h>

JNIEXPORT jstring
Java_com_example_hellojni_HelloJni_DummyInit(JNIEnv*env, jobject thiz) {

    dummy *handle;
    char *msg;
    int rc = dummy_init_from_id("ml", &handle, &msg);
    if (rc == DUMMY_SUCCESS) {
        return (*env)->NewStringUTF(env, "Init was successful");
    } else {
        return (*env)->NewStringUTF(env, msg);
    }

}

JNIEXPORT void 
Java_com_example_hellojni_HelloJni_DummySetSymbolsDir(JNIEnv *env, jobject thiz,
                                                      jstring dir) {
    dummy_set_symbols_dir(dir);

}
准确的误差如下所示

FATAL EXCEPTION: main
Process: com.example.hellojni, PID: 2558
java.lang.UnsatisfiedLinkError: No implementation found for void com.example.hellojni.HelloJni.DummySetSymbolsDir(java.lang.String) (tried Java_com_example_hellojni_HelloJni_DummySetSymbolsDir and Java_com_example_hellojni_HelloJni_DummySetSymbolsDir__Ljava_lang_String_2)
at com.example.hellojni.HelloJni.DummySetSymbolsDir(Native Method)
at com.example.hellojni.HelloJni.onCreate(HelloJni.java:34)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Android.mk文件如下

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
如果需要更多信息,请务必告诉我。
谢谢。

您可能需要用外部“C”块包围代码:

< C和C++】你可以做:

#ifdef __cplusplus
extern "C" {
#endif

    Your JNIEXPORT functions

#ifdef __cplusplus
}
#endif

将用于检索文件的代码放在try-catch块(或任何类似的块)中。另外,在将代码定向到文件时,请确保整个目录都以C开头:(在windows中)。

您可以发布您的Android.mk吗?您的文件是*.C还是*.cpp?@MaxPlakhuta它是Cfile@Alex:我已经上传了,看一看。我想回顾一下。验证本机库(.so)是否捆绑在apk中。感谢您的输入。不幸的是,应用上述更改并不能更改/删除错误:(@malayaleecoder,共享您的android.mk和application.mk文件我的application.mk只是说“APP_ABI:=x86”尝试在其他平台上构建和检查。这可能是x86相关的问题。感谢您的建议,我们将尝试一下。
extern "C" {
    Your JNIEXPORT functions
}
#ifdef __cplusplus
extern "C" {
#endif

    Your JNIEXPORT functions

#ifdef __cplusplus
}
#endif