加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:15:17 所属栏目:Java 来源:网络整理
导读:当它说jniLibs和其他库中的.so文件无法加载时,我正在尝试将本机编写的共享库集成到我的应用程序中. 这是C文件 #include string.h#include jni.h#include dummy.hJNIEXPORT jstringJava_com_example_hellojni_HelloJni_DummyInit(JNIEnv*env,jobject thiz) {
当它说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);

}

这是Java文件

package com.example.hellojni;

import android.app.Activity;
import android.util.Log;
import android.widget.TextView;
import android.os.Bundle;
import java.io.File;


public class HelloJni extends Activity
{


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);

        File f = new File(getAssets() + "/ml");
        if (f.exists()) try {

            System.out.println("Scheme exists");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        String dir = f.getPath();

        DummySetSymbolsDir(dir);

        TextView tv = new TextView(this);
        tv.setText(DummyInit());
        setContentView(tv);
    }


    /*** Native Methods ***/
    public native String DummyInit();
    public native void DummySetSymbolsDir(String dir);

    static {
        try {
            System.loadLibrary(("dummy"));
        } catch (UnsatisfiedLinkError e) {
            Log.e("JNI","Warning:Could not use dummy library");
        }
        try {
            System.loadLibrary("libs/libpthead.so");
        } catch (UnsatisfiedLinkError e) {
            Log.e("JNI","Warning:Could not use lipthread library");
        }
        try {
            System.loadLibrary("hello-jni");
        } catch (UnsatisfiedLinkError e) {
            Log.e("JNI","Warning:Could not use hello-jni library");
        }
    }
}

确切的错误如下

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)

如果需要更多信息,请告诉我.
谢谢.

解决方法

您可能需要使用extern“C”块来包围您的代码:

extern "C" {
    Your JNIEXPORT functions
}

对于C和C,您可以:

#ifdef __cplusplus
extern "C" {
#endif

    Your JNIEXPORT functions

#ifdef __cplusplus
}
#endif

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读