Ich versuche mich gerade mit JNI Programmierung. Meine Frage ist eher eine C++ Frage glaube ich jedenfalls aber ich versuche es trotzdem mal
Ich habe ein einfaches Java Programm:
Main.java
und
StrLen.java
dazu habe ich die h Datei automatisch generieren lassen mit javah
sieht so aus:
und dann meine c-Datei dazu
Wenn ich jetzt das ganze mit gcc kompiliere geht es ohne Probleme
gcc -ID:\Programme\Java\jdk1.6.0_05\include\ -ID:\Programme\Java\jdk1.6.0_05\include\win32\ -shared -Wl,--add-stdcall-alias -o test.dll strlen.c
Nun habe ich mir mit Visual Studio 2005 ein Win32 Projekt > DLL erstellt
habe dann meine h und c Datei eingefügt und habe dann auf "Als C-Code kompilieren (/TC)" umgestellt
kommt auch eine dll raus wenn ich diese dann aber in mein Eclipseprojekt kopiere und dann mein Java Projekt starte bekomme ich diesen Fehler:
Es fehlen also scheinbar noch Einstellungen in VS oder muss ich noch was anderes Beachten?
Die Datei von VS ist auch nur 6 KB groß und die von gcc ist 12,9 KB groß
Ich hoffe es hat schon jemand Erfahrungen mit JNI und Visual Studio dlls gemacht
Bin für jede Hilfe Dankbar
Ich habe ein einfaches Java Programm:
Main.java
Code:
public class Main
{
public static void main(String[] args)
{
System.out.println( StrLen.strlen("2003 UB313") );
}
}
und
StrLen.java
Code:
public class StrLen {
static {
System.loadLibrary( "test" );
}
public static native int strlen( String s );
}
dazu habe ich die h Datei automatisch generieren lassen mit javah
sieht so aus:
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class StrLen */
#ifndef _Included_StrLen
#define _Included_StrLen
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: StrLen
* Method: strlen
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_StrLen_strlen
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
und dann meine c-Datei dazu
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-Freunde2!\n");
return 0;
}
Wenn ich jetzt das ganze mit gcc kompiliere geht es ohne Probleme
gcc -ID:\Programme\Java\jdk1.6.0_05\include\ -ID:\Programme\Java\jdk1.6.0_05\include\win32\ -shared -Wl,--add-stdcall-alias -o test.dll strlen.c
Nun habe ich mir mit Visual Studio 2005 ein Win32 Projekt > DLL erstellt
habe dann meine h und c Datei eingefügt und habe dann auf "Als C-Code kompilieren (/TC)" umgestellt
kommt auch eine dll raus wenn ich diese dann aber in mein Eclipseprojekt kopiere und dann mein Java Projekt starte bekomme ich diesen Fehler:
Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Workspace\JNI_PCIe\src\test.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at StrLen.<clinit>(StrLen.java:5)
at Main.main(Main.java:6)
Es fehlen also scheinbar noch Einstellungen in VS oder muss ich noch was anderes Beachten?
Die Datei von VS ist auch nur 6 KB groß und die von gcc ist 12,9 KB groß
Ich hoffe es hat schon jemand Erfahrungen mit JNI und Visual Studio dlls gemacht
Bin für jede Hilfe Dankbar