Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI java.lang.UnsatisfiedLinkError_Java_C++_Java Native Interface_Unsatisfiedlinkerror - Fatal编程技术网

JNI java.lang.UnsatisfiedLinkError

JNI java.lang.UnsatisfiedLinkError,java,c++,java-native-interface,unsatisfiedlinkerror,Java,C++,Java Native Interface,Unsatisfiedlinkerror,我试图调用一个本机方法,但得到“java.lang.UnsatifiedLinkError” 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_Nat

我试图调用一个本机方法,但得到“java.lang.UnsatifiedLinkError”

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);
    }
}
C/C++DLL头文件

/* 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方法)时,它失败了

Java类的名称是
CLS\u NativeData
。但是,C++中你写的是:

Java\u pkg\u 1main\u CLS\u nativedata\u getValue


并在任何地方使用
CLS_1NativeData
。它拼错了。因此,类加载器在共享库中找不到本机方法,并说
java.lang.unsatifiedLinkError

,但当我调用第一个方法时,它工作得非常好。第二种方法失败。对不起,我没有撒谎。第一种方法非常有效。无论如何,我会尝试修复方法的名称您是对的,我非常感谢您,因为错误出现在方法的名称中。但我不明白为什么第一种方法有效。。。Спасибо коллега :)