Problem mit dem Java Native Interface in Verbindung mit MinGW

uweb

Grünschnabel
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 ----------
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
 
Zurück