Итак, я новичок в JNI, и я следую примеру простого приветствия, но продолжаю получать ошибку UnsatisfiedLinkError
. Что я делаю не так? Вот мой .h файл:JNI UnsatisfiedLink Error
/* 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
.c Файл
#include <jni.h>
#include<stdio.h>
#include<windows.h>
#include "jnihellonative.h"
JNIEXPORT void JNICALL
Java_JNITESTS_jnihellonative_hellofromc(JNIEnv *env, jobject obj){
printf("Hello World");
return;
}
Java главный класс
package JNITEST;
public class Jnihello {
public static void main(String[] args) {
jnihellonative jniprint = new jnihellonative();
jniprint.hellofromc();
}
}
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 и идентичны тем, которые я ранее имел, но я изменил имя файлов на JNITEST_jnihellonative и, похоже, работал. –
Невозможно. Изменение имен файлов .h или .c не влияет на Java. Вам нужно было изменить имя собственного метода с 'Java_JNITESTS_jnihellonative_hellofromc' на' Java_JNITEST_JniHello_hellofromc'. – EJP
если я перехожу к 'Java_JNITEST_JniHello_hellofromc', проблема остается, потому что это' javahellonative', который имеет собственный метод jni. Так что я сделал, был чистым и создал java-код, удалил старые .h и .c файлы, сгенерировал новые с указанным выше именем, скомпилировал код C и сгенерировал DLL-файл и запустил программу. Казалось, это сработало для меня. Также, сравнивая новые .c и .h со старыми, они все те же. –