JNI java.lang.UnsatisfiedLinkError

Я пытаюсь вызвать один из собственных методов, но я получаю «java.lang.UnsatisfiedLinkError».

Класс Java:

public class CLS_NativeData {

private final static String sLibName = "NativeData.dll";

private native String getValue(int i);
private native void setValue(int i);

public CLS_NativeData() {
super();
}

static {
System.load(CLS_Globals.LIB_PATH + sLibName);
}

public String getData(int i) {
return getValue(i);
}

public void setData(int i) {
setValue(i);
}
}

Заголовочный файл DLL C / C ++

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

#ifndef _Included_pkg_main_CLS_NativeData
#define _Included_pkg_main_CLS_NativeData
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     pkg_main_CLS_NativeData
* Method:    getValue
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_pkg_1main_CLS_1NativeData_getValue
(JNIEnv *, jobject, jint);

/*
* Class:     pkg_main_CLS_NativeData
* Method:    setValue
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_pkg_1main_CLS_1NativeData_setValue
(JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

C / C ++ DLL.cpp

   JNIEXPORT jstring JNICALL Java_pkg_1main_CLS_1NativeData_getValue
(JNIEnv * env, jobject obj, jint i)
{
CoInit();

switch(i) {
case 0:
return env->NewStringUTF(getCPUInfo().c_str());
break;
case 1:
return env->NewStringUTF(getSystemInfo().c_str());
break;
case 2:
return env->NewStringUTF(getMachineInfo().c_str());
break;
case 3:
return env->NewStringUTF(getAntivirusInfo().c_str());
break;
case 4:
return env->NewStringUTF(getProcessList().c_str());
break;
default:
return env->NewStringUTF("ERROR");
}
}

// FAILED METHOD
JNIEXPORT void JNICALL Java_pkg_1main_CLS_1NativeData_setValue
(JNIEnv * env, jobject obj, jint i)
{
switch (i) {
case 0:
printf("Hola mundo\n");
break;
}
}

Таким образом, когда я вызываю первый метод, он работает отлично, но когда я вызываю второй метод (метод void), он терпит неудачу.

1

Решение

Имя вашего Java-класса CLS_NativeData, Тем не менее, в C ++ вы пишете:

Java_pkg_1main_CLS_1NativeData_getValue

И использовать CLS_1NativeData везде. Это с ошибкой. Поэтому загрузчик классов не может найти нативный метод в вашей общей библиотеке и говорит java.lang.UnsatisfiedLinkError,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]