java.lang.UnsatisfiedLinkError mit JNI

Status
Nicht offen für weitere Antworten.

Sonjaja

Mitglied
Hallo!
Ich versuche unter Windows eine einfache JNI Anwendung (HelloWorld) zum laufen zu bringen. Ich kann das Java Programm kompilieren, die C- header datei erzeugen, die dll erzeugen, aber bei der Ausführung tritt folgender Fehler auf.

Exception in thread "main" java.lang.UnsatisfiedLinkError: afficheCpp
at Bonjour.afficheCpp(Native Method)
at Bonjour.main(Bonjour.java:26)

Der Teil des Java Programmes funktioniert noch, nur das C++ Programm will nicht. Ich glaube auch nicht, dass es daran liegt, dass die dll nicht im LibraryPath ist, da folgender Fehler auftritt, wenn ich die dll lösche:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloW in java.lib
rary.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at Bonjour.<clinit>(Bonjour.java:19)

Mein Java Programm sieht folgendermaßen aus:

Code:
public class Bonjour {
    
    public native void afficheCpp();
    
    //chargement de la librairie c++ HelloWorld
    static {System.loadLibrary("HelloW"); }
    
    
    
    public static void main (String[] args)
    {
        System.out.println("coucou (en java)\n");
        new Bonjour().afficheCpp();        
    }
    
    
}

das C++ Programm wie folgt:

code]#include <jni.h>
#include "HelloW.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_Bonjour_afficheCpp (JNIEnv *env, jobject obj)
{
cout<<"Ich heisse Sonja ( en C++)"<<endl;

}[/code]

und die C++ Header Datei wie folgt:

Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Bonjour */

#ifndef _Included_Bonjour
#define _Included_Bonjour
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Bonjour
 * Method:    afficheCpp
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Bonjour_afficheCpp
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


Ich hab' schon alles mögliche ausprobiert, und habe keine Ahnung was ich noch ausprobieren soll. Vielleicht kann mir einer von Euch weiter helfen?

Sonja
 
G

Guest

Gast
Sonjaja hat gesagt.:
Der Teil des Java Programmes funktioniert noch, nur das C++ Programm will nicht. Ich glaube auch nicht, dass es daran liegt, dass die dll nicht im LibraryPath ist, da folgender Fehler auftritt, wenn ich die dll lösche:
Und wenn du die DLL nicht löschst (warum überhaupt?) und wenn sie im gleichen Verzeichnis wie
dein Programm oder in LibraryPath vorhanden ist?
Die Lib-Datei ist nur für den Linker interessant, dein Java-Programm kann damit nix anfangen.
 

Sonjaja

Mitglied
wenn ich die dll im gleichen Verzeichnis lasse tritt der erste Fehler auf, d.h. die dll wird gefunden, aber die Methode afficheCpp kann nicht gestartet werden. Das ist auch das Problem was mir Kopfzerbrechen bereitet. Ich habe schon alle möglichen Googleseiten abgesucht. Das einzige was ich gefunden habe ist, dass die Funktionsbezeichnungen in der .h und der .cpp Datei gleich sein müssen, aber das sind sie ja. Unter Linux läuft das Programm auch, nur unter Windows nicht. Ich verwende die Java Version jdk1.5.0_06 und den g++ Kompiler. Könnte es an irgendwelchen Versionen liegen?
Sonja
 
G

Guest

Gast
Das liegt an dem bescheuerten GNU-Compiler. Ich habe es nie verstanden, wie man den unter Windows
vernünftig zum Laufen bringt. Mit dem Compiler von MS geht es einwandfrei.
Code:
cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 /EHsc -LD hellow.cpp -Fehellow.dll
Wie compilierst du es mit dem gpp, ohne dass Fehlermeldungen zur Syntax der jni.h Datei kommen?
Kann es sein, dass zur Laufzeit irgendwelche Cygwin-DLLs fehlen?
 

Sonjaja

Mitglied
Ich hab' den MinGW Kompiler, und der hat sich beim kompilieren nicht beschwert. Ich habe auch probiert die jni_md.h Datei zu verändern

Code:
typedef long jint;
#ifdef __GNU__
typedef long long jlong;
typedef signed char jbyte;
#else
typedef __int64 jlong;
#endif 
typedef signed char jbyte;

allerdings ändert das an meinem Problem nichts. Das Problem ist auch das gleiche, je nachdem ob ich ein C-Programm schreibe und mit gcc kompiliere oder C++ mit g++.
Aber danke für den Typ mit dem MS Kompiler, das probier ich gleich mal!
 

Sonjaja

Mitglied
hab' die Lösung! Es funktioniert doch mit dem GNU Compiler. Man muss noch eine .def Datei mit folgendem Inhalt erstellen und diese bei der Kompilation der dll hinzufügen.

gcc -o Bonjour.dll -shared -IC:\Java\jdk1.5.0_06\include -IC:
\Java\jdk1.5.0_06\include\win32 Bonjour.c Bonjour.def


Bonjour.def

Code:
EXPORTS
Java_Bonjour_afficheCpp

Danke nochmal für die Mithilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Eclipse Dll einbinden java.lang.UnsatisfiedLinkError nur in Eclipse nicht via javac Allgemeine Java-Themen 1
B JNI - java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 21
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
I java.lang.UnsatisfiedLinkError: Allgemeine Java-Themen 8
D java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Threads - java.lang.IllegalThreadStateException Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
Crooda Compiler-Fehler java.lang.NoClassDefFoundError bitcoinj Allgemeine Java-Themen 1
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
S java.lang.NoClassDefFoundError Allgemeine Java-Themen 5
J Compiler-Fehler java.lang.StringIndexOutOfBoundsException Allgemeine Java-Themen 12
D java.lang.TypeNotPresentException Allgemeine Java-Themen 3
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
H java.lang.OutOfMemoryError bei der wiederholten Erzeugng von Threads Allgemeine Java-Themen 8
B Variable class in java.lang.Object Allgemeine Java-Themen 11
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
T ProcessBuilder (java.lang.NoClassDefFoundError) Allgemeine Java-Themen 2
T java.lang.AssertionError: Allgemeine Java-Themen 4
T java.lang.ClassCastException: Allgemeine Java-Themen 4
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
B java.lang.UnsupportedClassVersionError Allgemeine Java-Themen 12
M cannot be cast to java.lang.Comparable Allgemeine Java-Themen 5
E Interpreter-Fehler java.lang.ExceptionInInitializerError Allgemeine Java-Themen 12
C java.lang.ClassCastException Allgemeine Java-Themen 3
P Fehler beim Programmstart: java.lang.NoClassDefFound Allgemeine Java-Themen 12
T java.lang.ClassCastException Allgemeine Java-Themen 7
B Java - java.lang Allgemeine Java-Themen 12
sylo java.lang.NoSuchMethodError: Obwohl Methode vorhanden Allgemeine Java-Themen 8
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
H Applet java.lang.reflect.InvocationTargetException Allgemeine Java-Themen 9
M SerialPort RS232 : java.lang.NoSuchFieldError: eis Allgemeine Java-Themen 2
U java.lang.ClassNotFoundException: .jar Allgemeine Java-Themen 8
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
W java.lang.ClassCastException Allgemeine Java-Themen 10
N java.lang.InstantiationException Allgemeine Java-Themen 10
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
D replaceAll => no such java.lang.NoSuchMethodError Allgemeine Java-Themen 5
G java.lang.LinkageError: loader constraints violation. Allgemeine Java-Themen 3
O java.lang.NumberFormatException für normalen integer Allgemeine Java-Themen 4
G Javadoc generiert keine Links zu java.lang Klassen? Allgemeine Java-Themen 4
Y java.lang.UnsupportedClassVersionError: Allgemeine Java-Themen 5
G java.lang.ClassCastException Allgemeine Java-Themen 3
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
E java.lang.outofmemory über windows-cmd ändern Allgemeine Java-Themen 6
J Folgender Fehler: java.lang.NullPointerException Allgemeine Java-Themen 4
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
J java.lang.StackOverflowError Debugging? Allgemeine Java-Themen 51
S Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink Allgemeine Java-Themen 2
reibi java.lang.Class - Resource - Solaris Allgemeine Java-Themen 17
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
M java.lang.UnsupportedClassVersionError: Bad version number i Allgemeine Java-Themen 5
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
O "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBounds Allgemeine Java-Themen 6
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
S java.lang.OutOfMemoryError: Java Allgemeine Java-Themen 22
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
E Java Fehlermeldung java.lang.NoClassDefFoundError Allgemeine Java-Themen 3
G Problem mit java.lang.reflect.Field Allgemeine Java-Themen 15
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
M java.lang.NullPointerException im Chatclient Allgemeine Java-Themen 12
H java.lang.ExceptionInInitializerError Allgemeine Java-Themen 7
D java.lang.IllegalMonitorStateException: current thread not Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
T Profifrage: java.lang.StackOverflowError bei BigInteger Allgemeine Java-Themen 27
M java.lang.OutOfMemoryError Allgemeine Java-Themen 2
W java.lang.ClassNotFoundException Allgemeine Java-Themen 10
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S fehlermeldung java.lang.OutOfMemoryError Allgemeine Java-Themen 5
B java.lang.NullPointerException Allgemeine Java-Themen 11
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
J java.lang.ArrayIndexOutOfBoundsException Allgemeine Java-Themen 2
P Hilfe zu java.lang.Object Allgemeine Java-Themen 3
K java.lang.reflect - Getter und Setter ermitteln Allgemeine Java-Themen 8
G jTable-Problem --> java.lang.OutOfMemoryError Allgemeine Java-Themen 5
G Java.lang.Compiler Allgemeine Java-Themen 3
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
F java.lang.OutOfMemoryError Allgemeine Java-Themen 13
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben