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;
问题描述
我的工作中,我想提出对本地字符串方法返回我的字符串值的Android 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屋!