У меня есть тестовый пример, когда я пытаюсь получить доступ к коду C из моей программы Java с помощью JNI. Необходимые шаги следующие:
<сильный>1. Программа Java, вызывающая собственные методы:
public class RunnerClass{
public native void win32_svc_install();
static{
System.loadLibrary("testDll");
System.out.println("library loaded successfully");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new RunnerClass().win32_svc_install();
}
}
<сильный>2. Теперь, после создания файла .class
и создания соответствующего файла .h
, я поместил реализацию собственного метода в файл .c
.
/* DO NOT EDIT THIS FILE - it is machine generated */
//RunnerClass.h
#include <jni.h>
/* Header for class RunnerClass */
#ifndef _Included_RunnerClass
#define _Included_RunnerClass
#ifdef __cplusplus
extern "C" {
#endif/*
* Class: RunnerClass
* Method: nx_win32_svc_install
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_RunnerClass_win32_1svc_1install
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
Файл RunnerClass.c
содержит реализацию собственного метода внутри него. Что именно будет делать этот метод, так это вызывать ServiceManager
окон, чтобы использовать его. Моя программа Java должна выполнять эти действия.
Теперь проблема возникает после создания testDll.dll
. Перед интерпретацией кода Java я установил путь к требуемой библиотеке (testDll
) в файле java.library.path
.
Теперь, когда я запускаю свою программу, моя библиотека загружается, но выдает UnsatisfiedLinkError
собственному методу. Точная ошибка выглядит следующим образом:
Exception in thread "main" hello ,java.lang.UnsatisfiedLinkError: RunnerClass.win32_svc_install(ILjava/lang/String;)V
at RunnerClass.win32_svc_install(Native Method)
at RunnerClass.main(MainWs.java:58)
Я провел много исследований и до сих пор понял, что исключение выдается из-за того, что программа не может найти реализацию нативного метода в загружаемой библиотеке.
parsecmdline()
? - person millimoose   schedule 16.03.2013java.library.path
? - person Byron   schedule 16.03.2013