Hallo,
ich habe ein kleines Problem mit dem Java Native Interface in Verbindung mit MinGW.
Das Beispiel stammt aus "Java ist auch eine Insel" und endet bei mir mit:
Exception in thread "main" java.lang.UnsatisfiedLinkError: strlen
at StrLen.strlen(Native Method)
at StrLen.main(StrLen.java:9)
Gegeben sind :
---------- jni.bat ----------
---------- StrLen.java ----------
---------- StrLen.c ----------
---------- Makefile.mak ----------
ich habe ein kleines Problem mit dem Java Native Interface in Verbindung mit MinGW.
Das Beispiel stammt aus "Java ist auch eine Insel" und endet bei mir mit:
Exception in thread "main" java.lang.UnsatisfiedLinkError: strlen
at StrLen.strlen(Native Method)
at StrLen.main(StrLen.java:9)
Gegeben sind :
---------- jni.bat ----------
Code:
javac StrLen.java
javah -jni -o StrLen.h StrLen
make all -f makefile.mak
java StrLen
pause
---------- StrLen.java ----------
Code:
public class StrLen
{
static {
System.loadLibrary("strlen");
}
public static native int strlen( String s );
public static void main( String args[] )
{
System.out.println( strlen("Sandra ist doof.") );
}
}
---------- StrLen.c ----------
Code:
#include <jni.h>
#include "StrLen.h"
#include <stdio.h>
JNIEXPORT jint JNICALL Java_StrLen_strlen( JNIEnv *env, jclass clazz, jstring s )
{
printf( "Hallo Java-Freunde!\n" );
return 0;
}
---------- Makefile.mak ----------
Code:
# Projekt-abhängig
OBJECT=StrLen.o
DLL=StrLen.dll
# Installations-abhängig
# INC_OPT sollte auf die Standard-Header-Dateien des MinGW-Kompilers zeigen
# LIB_DIR_OPT sollte auf den Standard-Lib-Verzeichnis des MinGW-Kompilers zeigen
INC_OPT=-I"D:\Programme\MinGW\include" -I"D:\Programme\j2sdk1.4.2\include" -I"D:\Programme\j2sdk1.4.2\include\win32"
LIB_DIR_OPT=-L"D:\Programme\MinGW\lib" -L.
LIB_OPT=
# "Funktionsdefinitionen" auf dem Raum der Dateinamen
%.o: %.c
gcc $(INC_OPT) -o $@ -c $<
%.dll: %.o
gcc -shared -o $@ $< $(LIB_DIR_OPT) $(LIB_OPT)
# gcc -shared -o $@ $< -Wl,--out-implib,$(patsubst %.dll,lib%.a,$@)
%.exe: %.o
gcc -o $@ $< $(DLL) $(LIB_DIR_OPT) $(LIB_OPT)
# gcc -o $@ $< -l$(patsubst %.dll,lib%.a,$(DLL)) $(LIB_DIR_OPT) $(LIB_OPT)
# Targets:
all: $(OBJECT) $(DLL) $(APP)
clean:
rm -f $(OBJECT) $(DLL) $(APP)
again: clean all