melmager
Erfahrenes Mitglied
Ich habe keine Idee mehr was Falsch läüft - ich Veruche schon seit Tagen irgendwas mit JNI zum laufen zubeommen.
immer kommt sowas:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no SettingVariables in java.library.path
Ich habe Jbulder unter Linux am laufen - und ja die so Datei ist im richtigen Verzeichnis denn er findet sie
SettingVariables.h
das SettingVariables.c
und so den Compiler angeworfen
gcc -shared -I/home/wolfgang/JBuilder8/jdk1.4/include/ -I/home/wolfgang/JBuilder8/jdk1.4/include/linux/ SettingVariables.c
was mache ich falsch ?
den Code habe ich übrigends von eine Uniseite "geborgt"
immer kommt sowas:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no SettingVariables in java.library.path
Ich habe Jbulder unter Linux am laufen - und ja die so Datei ist im richtigen Verzeichnis denn er findet sie
Code:
class SettingVariables {
public long _long = 1;
private int _int = 2;
public static long _static_long = 3;
private static int _static_int = 4;
public native void update();
public void show() {
System.out.println("public long _long : "+_long);
System.out.println("private int _int : "+_int);
System.out.println("public static long _static_long : "+_static_long);
System.out.println("private static int _static_int : "+_static_int);
}
}
public class Main {
static {
System.loadLibrary("SettingVariables");
}
public static void main(String[] args) {
SettingVariables sv = new SettingVariables();
System.out.println("\nbefore native call:");
sv.show();
sv.update(); // Aufruf einer nativen Methode
System.out.println("\nafter native call:");
sv.show();
}
}
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class SettingVariables */
#ifndef _Included_SettingVariables
#define _Included_SettingVariables
#ifdef __cplusplus
extern "C" {
#endif
/* Inaccessible static: _static_long */
/* Inaccessible static: _static_int */
/*
* Class: SettingVariables
* Method: update
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_SettingVariables_update
(JNIEnv *env, jobject thisObj );
#ifdef __cplusplus
}
#endif
#endif
Code:
#include "SettingVariables.h"
JNIEXPORT void JNICALL
Java_SettingVariables_update(JNIEnv *env, jobject thisObj) {
jclass clazz;
jfieldID fid_long;
jfieldID fid_int;
jfieldID fid_static_long;
jfieldID fid_static_int;
jint ji = 100;
// Klassen-Zeiger holen
clazz = (*env)->GetObjectClass(env, thisObj);
// setzen der Non-Static Variablen
fid_long = (*env)->GetFieldID(env, clazz, "_long", "J");
fid_int = (*env)->GetFieldID(env, clazz, "_int", "I");
(*env)->SetLongField(env, thisObj, fid_long, ji++);
(*env)->SetIntField(env, thisObj, fid_int, ji++);
// setzen der Static Variablen
fid_static_long = (*env)->GetStaticFieldID(env, clazz, "_static_long", "J");
fid_static_int = (*env)->GetStaticFieldID(env, clazz, "_static_int", "I");
(*env)->SetStaticLongField(env, clazz, fid_static_long, ji++);
(*env)->SetStaticIntField(env, clazz, fid_static_int, ji++);
}
und so den Compiler angeworfen
gcc -shared -I/home/wolfgang/JBuilder8/jdk1.4/include/ -I/home/wolfgang/JBuilder8/jdk1.4/include/linux/ SettingVariables.c
was mache ich falsch ?
den Code habe ich übrigends von eine Uniseite "geborgt"
Zuletzt bearbeitet: