Hallo,
möchte das JNI Demo nachschreiben.
Meine Dateien sehen so aus:
StrLenDemo.java
StrLen.java
strlen.h
strlen.c
Die .c Datei hab ich mit dem gcc von cygwin mit folgenden Befehl compielert:
gcc -mno-cygwin -I C:/Programme/Java/jdk1.6.0/include -I C:/Programme/Java/jdk1.6.0/include/win32 -shared -Wl,--add-stdcall-alias -o ./strlen.dll ./strlen.c
Bekomme bei Ausführung der StrLenDemo diesen Fehler:
Exception in thread "main" java.lang.UnsatisfiedLinkError: jniDemo.StrLen.strlen(Ljava/lang/String
I
at jniDemo.StrLen.strlen(Native Method)
at jniDemo.StrLenDemo.main(StrLenDemo.java:7)
java.library.path ==
C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0\bin;C:\cygwin\bin;C:\Program Files\Common Files\Nero\Lib\
Genau dass passiert auch beim Orginal JNI Projekt der JavaInsel8 mit den Orginal .c .h .dll Dateien.
Dies Demo sollte aber eigentlich fehlerfrei laufen.
Hat jemand mit JNI Erfahrung und kann mir sagen wos haken könnte?
Gruß
Hoss
möchte das JNI Demo nachschreiben.
Meine Dateien sehen so aus:
StrLenDemo.java
Java:
package jniDemo;
public class StrLenDemo
{
public static void main( String[] args )
{
System.out.println( StrLen.strlen("2003 UB313") );
}
}
StrLen.java
Java:
package jniDemo;
public class StrLen
{
static
{
System.loadLibrary( "strlen" );
System.out.println( System.getProperty("java.library.path") );
}
public static native int strlen( String s );
}
strlen.h
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jniDemo_StrLen */
#ifndef _Included_jniDemo_StrLen
#define _Included_jniDemo_StrLen
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jniDemo_StrLen
* Method: strlen
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_jniDemo_StrLen_strlen
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
strlen.c
Code:
#include <jni.h>
#include "strlen.h"
#include <stdio.h>
JNIEXPORT jint JNICALL Java_com_tutego_jni_StrLen_strlen(
JNIEnv *env, jclass clazz, jstring s )
{
printf( "Hallo Java-Freunde!\n" );
return 0;
}
Die .c Datei hab ich mit dem gcc von cygwin mit folgenden Befehl compielert:
gcc -mno-cygwin -I C:/Programme/Java/jdk1.6.0/include -I C:/Programme/Java/jdk1.6.0/include/win32 -shared -Wl,--add-stdcall-alias -o ./strlen.dll ./strlen.c
Bekomme bei Ausführung der StrLenDemo diesen Fehler:
Exception in thread "main" java.lang.UnsatisfiedLinkError: jniDemo.StrLen.strlen(Ljava/lang/String
at jniDemo.StrLen.strlen(Native Method)
at jniDemo.StrLenDemo.main(StrLenDemo.java:7)
java.library.path ==
C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0\bin;C:\cygwin\bin;C:\Program Files\Common Files\Nero\Lib\
Genau dass passiert auch beim Orginal JNI Projekt der JavaInsel8 mit den Orginal .c .h .dll Dateien.
Dies Demo sollte aber eigentlich fehlerfrei laufen.
Hat jemand mit JNI Erfahrung und kann mir sagen wos haken könnte?
Gruß
Hoss
Zuletzt bearbeitet: