Я пытаюсь использовать JNI в первый раз, но когда я запускаю свою программу java, я продолжаю получать UnsatisfiedLinkError
. Ошибка говорит, что он не может найти мои зависимые библиотеки. Я видел вопрос JNI Hello World Unsatisfied Link Error, но их рекомендации не сработали. В качестве побочного сведению, я не владею Microsoft Visual Studio, и я бегу на окнах 10.Java не загружает зависимые библиотеки
Я использую следующие команды для того, чтобы скомпилировать и запустить свою программу:
javac HelloWorld.java
javah HelloWorld
gcc -Wl,--add-stdcall-alias -I"C:/Program Files/Java/jdk1.8.0_91/include" -I"C:/Program Files/Java/jdk1.8.0_91/include/win32" -shared -o HelloWorld.dll HelloWorld.c
java -Djava.library.path=. HelloWorld
Исходный код:
Java Источник (HelloWorld.java
):
public class HelloWorld {
static {
System.loadLibrary("HelloWorld");
}
private static native void sayHello();
public static void main(String[] args) {
sayHello();
}
}
генерируемый файл заголовка (HelloWorld.h
):
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHello
* Signature:()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
C файл (HelloWorld.c
):
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jclass cls) {
printf("C says hello!");
}
Решение состоит в том, чтобы убедиться, что зависимые библиотеки доступны через PATH. – EJP
По пути, вы имеете в виду переменные окружения или в самой команде? –
Вы удостоверились, что JRE и библиотека имеют одинаковую архитектуру (32/64 бит)? – user2543253