Hi,
ich versuche mich gerade ein bisschen an JNI und habe dazu das Tutorial in den JAQ durchgearbeitet. Leider will das nicht so klappen bei mir. Ich bin wie folgt vorgegangen:
HelloWorld.java geschrieben:
Die dazugehörige Header-Datei erstellt:
Dann habe ich unter meiner Eclipse C/C++ IDE ein neues Shared Library Projekt angelegt (JNIDLLs). Dort habe ich ein Source-Verzeichnis für die Header-Datei erstellt und diese dort eingefügt. Außerdem habe ich ein weiteres Source-Verzeichnis für meine C-Datei angelegt. Die C-Datei sieht wie folgt aus:
Außerdem habe ich noch die Settings des Projekts unter GCC C Compiler/Directories dahingehend angepasst, dass auf die Header-Datei im Workspace und auf das include und include/win32 Verzeichnis des JDKs verwiesen wird.
Das Ganze habe ich dann builden lassen und die daraus resultierende dll (libJNIDLLs.dll) in C:\winnt\system32 kopiert (dahin verweist u. a. auch der java.library.path). Wenn ich mein Java-Programm jetzt aber ausführen möchte, bekomme ich folgende Fehlermeldung:
weiß jemand woran das liegt und was ich dagegen machen kann? Danke!
ich versuche mich gerade ein bisschen an JNI und habe dazu das Tutorial in den JAQ durchgearbeitet. Leider will das nicht so klappen bei mir. Ich bin wie folgt vorgegangen:
HelloWorld.java geschrieben:
Code:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("libJNIDLLs");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
Die dazugehörige Header-Datei erstellt:
Code:
/* 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: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
Dann habe ich unter meiner Eclipse C/C++ IDE ein neues Shared Library Projekt angelegt (JNIDLLs). Dort habe ich ein Source-Verzeichnis für die Header-Datei erstellt und diese dort eingefügt. Außerdem habe ich ein weiteres Source-Verzeichnis für meine C-Datei angelegt. Die C-Datei sieht wie folgt aus:
Code:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
Außerdem habe ich noch die Settings des Projekts unter GCC C Compiler/Directories dahingehend angepasst, dass auf die Header-Datei im Workspace und auf das include und include/win32 Verzeichnis des JDKs verwiesen wird.
Das Ganze habe ich dann builden lassen und die daraus resultierende dll (libJNIDLLs.dll) in C:\winnt\system32 kopiert (dahin verweist u. a. auch der java.library.path). Wenn ich mein Java-Programm jetzt aber ausführen möchte, bekomme ich folgende Fehlermeldung:
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld.displayHelloWorld()V
at HelloWorld.displayHelloWorld(Native Method)
at HelloWorld.main(HelloWorld.java:9)
weiß jemand woran das liegt und was ich dagegen machen kann? Danke!