Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
Java JNI未满足链接错误_Java_C_Netbeans_Java Native Interface_Native Methods - Fatal编程技术网

Java JNI未满足链接错误

Java JNI未满足链接错误,java,c,netbeans,java-native-interface,native-methods,Java,C,Netbeans,Java Native Interface,Native Methods,所以我是JNI的新手,下面是一个简单的hello word示例,但我一直收到错误UnsatifiedLinkError。我做错了什么?这是我的.h文件: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class JNITEST_jnihellonative */ #ifndef _Included_JNITEST_jnihellonative #define

所以我是JNI的新手,下面是一个简单的hello word示例,但我一直收到错误UnsatifiedLinkError。我做错了什么?这是我的.h文件:

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

#ifndef _Included_JNITEST_jnihellonative
#define _Included_JNITEST_jnihellonative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     JNITEST_jnihellonative
* Method:    hellofromc
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_JNITEST_jnihellonative_hellofromc(JNIEnv *,jobject);

#ifdef __cplusplus
}
#endif
#endif
java类

package JNITEST;


public class jnihellonative {

    public native void hellofromc();

    static{
        System.load("C:\\Users\\Kevin\\Documents\\NetBeansProjects\\JniHelloTest.dll");
    }
}
我一直在犯这个错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: JNITEST.jnihellonative.hellofromc()V
    at JNITEST.jnihellonative.hellofromc(Native Method)
    at JNITEST.Jnihello.main(Jnihello.java:19)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

我尝试过使用System.load和System.loadLibrary,但我遇到了相同的错误。

自生成.h文件并编写.c文件以来,您已更改了类的名称。.h文件有Jnihello,Java代码有Jnihello

我已尝试使用System.load和System.loadLibrary


无关紧要。您不会从这两种方法中得到异常,而是在调用本机方法时得到异常。

谢谢,我重新生成了.h和。c文件和与我以前使用的文件相同,但我确实将文件名更改为JNITEST_jnihellonative,这似乎有效。不可能。更改.h或.c文件的名称对Java没有任何影响。您必须将本机方法的名称从Java_JNITESTS_JniHello_hellofromc更改为Java_JNITESTS_JniHello_hellofromc。如果我更改为Java_JNITESTS_JniHello_hellofromc,问题仍然存在,因为javahellonative具有jni本机方法。所以我所做的就是清理和构建java代码,删除旧的.h和.c文件,生成具有前面提到的名称的新文件,编译de c代码,生成一个dll文件并运行程序。这似乎对我有用。另外,当比较新的.c和.h与旧的时,它们仍然是一样的。这没有意义。JNI本机方法所需的名称是Java_JNITEST_JniHello_hellofromc。“拥有jni本机方法的是javahellonative”这句话毫无意义。
package JNITEST;


public class jnihellonative {

    public native void hellofromc();

    static{
        System.load("C:\\Users\\Kevin\\Documents\\NetBeansProjects\\JniHelloTest.dll");
    }
}
Exception in thread "main" java.lang.UnsatisfiedLinkError: JNITEST.jnihellonative.hellofromc()V
    at JNITEST.jnihellonative.hellofromc(Native Method)
    at JNITEST.Jnihello.main(Jnihello.java:19)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)