java.lang.UnsatisfiedLinkError中:本机方法未找到:com.ziqitza.murgency.activities.FibLib.getTestString :()Ljava /朗/字符串; [英] java.lang.UnsatisfiedLinkError: Native method not found: com.ziqitza.murgency.activities.FibLib.getTestString:()Ljava/lang/String;

查看:215
本文介绍了java.lang.UnsatisfiedLinkError中:本机方法未找到:com.ziqitza.murgency.activities.FibLib.getTestString :()Ljava /朗/字符串;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的工作中,我想提出对本地字符串方法返回我的字符串值的Andr​​oid NDK的应用程序。图书馆编译没有任何错误,但在运行时它给了我一个例外是:

  java.lang.UnsatisfiedLinkError中:未找到本机方法:com.ziqitza.murgency.activities.FibLib.getTestString :()Ljava /朗/字符串;

我的code C和头随类文件文件中如下,请帮我在这里:

com_testing_ndk_FibLib.h

  / * DO NOT EDIT这个文件 - 它是生成的机器* /
#包括LT&;&jni.h GT;
/ *头类com_ziqitza_murgency_activities_FibLib * /的#ifndef _Included_com_ziqitza_murgency_activities_FibLib
#定义_Included_com_ziqitza_murgency_activities_FibLib
#IFDEF __cplusplus
为externC{
#万一
/ *
 *类别:com_ziqitza_murgency_activities_FibLib
 *方法:fibNR
 *签名:(J)Ĵ
 * /
JNIEXPORT jlong​​ JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNR
  (JNIEnv的*,JCLASS,jlong​​);/ *
 *类别:com_ziqitza_murgency_activities_FibLib
 *方法:fibNI
 *签名:(J)Ĵ
 * /
JNIEXPORT jlong​​ JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNI
  (JNIEnv的*,JCLASS,jlong​​);/ *
 *类别:com_ziqitza_murgency_activities_FibLib
 *方法:getTestString
 *签名:(Ljava /朗/字符串;)Ljava /朗/字符串;
 * /
JNIEXPORT的jstring JNICALL Java_com_ziqitza_murgency_activities_FibLib_getTestString
  (JNIEnv的*,JCLASS,的jstring);#IFDEF __cplusplus
}
#万一
#万一

FibLib

 公共类FibLib {    静态的 {
        的System.loadLibrary(com_ziqitza_murgency_activities_FibLib);
    }    公共静态长fibJR(N久){
        返回N'LT = 0? 0:N == 1? 1:fibJR(N - 1)+ fibJR(N - 2);
    }
    公共本地静态长fibNR(N久);
    公共静态长fibJI(N久){
        长previous = -1;
        长期结果= 1;
        为(长I = 0; I< N;我++){
            长总和=结果+ previous;
            previous =结果;
            结果=总和;
        }
        返回结果;
    }
       公共本地静态长fibNI(N久);       公共本地静态字符串getTestString(字符串ABC);        //测试驱动程序
        公共静态无效的主要(字串[] args){
        }}

C $ C $ç

  / * DO NOT EDIT这个文件 - 它是生成的机器* /
#包括LT&;&com_testing_ndk_FibLib.h GT;静态jlong​​ FIB(jlong​​ N){
        返回N'LT = 0? 0:N == 1? 1:FIB(N - 1)+ FIB(N - 2);
    }JNIEXPORT jlong​​ JNICALL Java_com_testing_ndk_FibLib_fibNR
  (JNIEnv的* ENV,JCLASS clazz所jlong​​ N)
{
        返回FIB(N);
}
/ *
 *类别:com_testing_ndk_FibLib
 *方法:fibNI
 *签名:(J)Ĵ
 * /
JNIEXPORT jlong​​ JNICALL Java_com_testing_ndk_FibLib_fibNI
(JNIEnv的* ENV,JCLASS clazz所jlong​​ N)
{    jlong​​ previous = -1;
    jlong​​结果= ​​1;
    jlong​​我;
    对于(i = 0; I< N;我++){
        jlong​​总和=结果+ previous;
        previous =结果;
        结果=总和;
    }
    返回结果;}JNIEXPORT的jstring JNICALL Java_com_testing_ndk_FibLib_getTestString(JNIEnv的* ENV,JCLASS jclazz){
    的jstring海峡=(* ENV) - GT; NewStringUTF(ENV,您好!从本地code);
    返回海峡;
}


解决方案

我不是超级熟悉NDK,但它看起来像你的C code和相关的头文件不使用相同的包名。一个是 com_testing_ndk_FibLib ,另一个是 com_ziqitza_murgency_activities_FibLib

I am working on android-ndk application in which i am making on native String method to return me the string value. Library compiles without any error but on run time it gives me an exception that :

java.lang.UnsatisfiedLinkError: Native method not found: com.ziqitza.murgency.activities.FibLib.getTestString:()Ljava/lang/String;

My code for C and Header file along with class files are given below, please help me out here:

com_testing_ndk_FibLib.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ziqitza_murgency_activities_FibLib */

#ifndef _Included_com_ziqitza_murgency_activities_FibLib
#define _Included_com_ziqitza_murgency_activities_FibLib
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    fibNR
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNR
  (JNIEnv *, jclass, jlong);

/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    fibNI
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNI
  (JNIEnv *, jclass, jlong);

/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    getTestString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_ziqitza_murgency_activities_FibLib_getTestString
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

FibLib

public class FibLib {

    static {
        System.loadLibrary("com_ziqitza_murgency_activities_FibLib");
    }

    public static long fibJR(long n){
        return n<=0 ? 0 : n==1 ? 1: fibJR(n - 1) + fibJR(n - 2);
    }
    public native static long fibNR(long n);


    public static long fibJI(long n){
        long previous = -1;
        long result = 1;
        for (long i=0;i<n;i++){
            long sum = result + previous;
            previous = result;
            result = sum;
        }
        return result;
    }
       public native static long fibNI(long n);

       public native static String getTestString(String abc);

        // Test Driver
        public static void main(String[] args) {
        }

}

C Code

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_testing_ndk_FibLib.h>

static jlong fib(jlong n){
        return n<=0 ? 0 : n==1 ? 1: fib(n - 1) + fib(n - 2);
    }

JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNR
  (JNIEnv *env, jclass clazz, jlong n)
{
        return fib(n);
}
/*
 * Class:     com_testing_ndk_FibLib
 * Method:    fibNI
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNI
(JNIEnv *env, jclass clazz, jlong n)
{

    jlong previous = -1;
    jlong result = 1;
    jlong i;
    for (i=0;i<n;i++){
        jlong sum = result + previous;
        previous = result;
        result = sum;
    }
    return result;

}

JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_getTestString(JNIEnv* env, jclass jclazz) {
    jstring str = (*env)->NewStringUTF(env, "Hello from native code!");
    return str;
}

解决方案

I'm not super familiar with NDK, but it looks like your C code and the associated header file don't use the same package name. One is com_testing_ndk_FibLib and the other is com_ziqitza_murgency_activities_FibLib.

这篇关于java.lang.UnsatisfiedLinkError中:本机方法未找到:com.ziqitza.murgency.activities.FibLib.getTestString :()Ljava /朗/字符串;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆