JNI Problem

Taramsis

Bekanntes Mitglied
Hi Leute,

ich wollt ne Java-Anbindung an C++ testen und hab mich an ein HelloWorld Beispiel gerichtet und bekomme die Fehlermeldungen, dass "jni.h" nicht gefunden werden kann!

Ich habe in Java folgende Klasse:

Java:
package helloworld;

public class HelloWorld {

  public native void callNative(); 

  static {
    System.loadLibrary("HelloWorld");
  }

  public static void main(String[] args) {

    System.out.println("Servus, ich bin die Javaklasse. Wie geht es dir CallNative.DLL?");
    HelloWorld hello = new HelloWorld();
    hello.callNative();
    System.exit(0);
    }
}

Ich habe dann über MinGW die Header Datei erstellt. Danach habe ich eine C++ Klasse geschrieben die wie folgt aussieht:

Code:
#include <jni.h>
#include "helloworld_HelloWorld.h"
#include <iostream>

using namespace std;

JNIEXPORT void JNICALL Java_helloworld_HelloWorld_callNative(JNIEnv *env, jobject obj) {

   cout << "Mir geht es gut: Hello World!" << endl;

}


Jetzt muss ich ja die DLL-Datei mit Hilfe der Header datei erstellen. Dies versuchte ich mit dem Befehl:

Code:
gcc -shared -c HelloWorld.dll HelloWorld.cpp

Leider ohne Erfolg! Kann mir jemand helfen!
 

Taramsis

Bekanntes Mitglied
Wo würde ich den
Code:
-I C:/path/to/jni/header
in dem Befehl
Code:
gcc -shared -c HelloWorld.dll HelloWorld.cpp
einbauen?:oops:
 

Marco13

Top Contributor
gcc -I/das/verzeichnis -shared -o bla.dll bla.c
Ob ein Leerzeichen zwischen "I" und dem Pfad stehen muss oder darf müßte ich auch erst nachgucken...:oops:
 

Taramsis

Bekanntes Mitglied
Hi Leute,

ich habe nun die DLL erstellt und füge es im Root verzeichnis meines Projekt ein, da dort der Java Path ist. Nun bekkomme ich nach der Ausführung folgende Meldung:
Servus, ich bin die Javaklasse. Wie geht es dir CallNative.DLL?
Exception in thread "main" java.lang.UnsatisfiedLinkError: helloworld.HelloWorld.callNative()V
at helloworld.HelloWorld.callNative(Native Method)
at helloworld.HelloWorld.main(HelloWorld.java:15)

Ich hab mich schon tot gegoogelt! Kein Plan! ;(
 

Marco13

Top Contributor
Bist du sicher, dass der Klassen- und Packagename aus der Java-Klasse und der aus dem C-Header übereinstimmen? D.h. bist du sicher, dass der Header mit javah aus der aktuellen Klasse erzeugt wurde, und in der C-Datei genau die richtige Methode implementiert wurde?
 

Taramsis

Bekanntes Mitglied
Ich denke schon!
Header Datei die durch javah aus der java datei erzeugt wurde:

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

#ifndef _Included_helloworld_HelloWorld
#define _Included_helloworld_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     helloworld_HelloWorld
 * Method:    callNative
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_helloworld_HelloWorld_callNative
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

diese habe ich dann angepasst zu:

Code:
#include <jni.h>
#include "helloworld_HelloWorld.h"
#include <iostream>

using namespace std;

JNIEXPORT void JNICALL Java_helloworld_HelloWorld_callNative(JNIEnv *env, jobject obj) {

   cout << "Mir geht es gut: Hello World!" << endl;

}

Hab ich etwas falsch gemacht?
 

KrokoDiehl

Top Contributor
Hast du ein Programm, mit dem du mal in die DLL schauen kanns? Ich habe hier z.B. Dependency-Walker, mit dem man sehen kann, welche Funktionen eine DLL exportiert. Der genannte UnsatisfiedLinkError sagt nämlich, dass er deine native Funktion nicht findet.
Vom geposteten Code her sieht alles ok aus.

Probier mal, die temporären Dateien vom gcc zu löschen (.obj), damit der Compiler alles neu macht. Um in Makefile-Sprache zu reden:
make clean
make all
Klingt doof, hilft aber manchmal ;)
 

Marco13

Top Contributor
Aaahhh... Moment, der GCC mit MinGW hat da ein bißchen Probleme... irgendwas ist da mit den Funktionsnamen aus der DLL, die irgendwie die Form haben wie "someFunction@34" oder so, und der GCC/MinGW hängt das "@34" oder so nicht dran... ich hatte da schonmal eine Lösungsmöglichkeit gefunden, die kann ich heute abend mal posten (falls ich's vergesse: nochmal hier nachfragen oder PN).
 

Taramsis

Bekanntes Mitglied
@ Marco13: Das wär lieb!

@ KrokoDiehl: hatte dies zuvor probiert manuell alles zu löschen, aber ohne erfolg! Und leider halfen die Befehle auch nicht! Ich benutze auch depends und dort werden mir keine Fehler angezeigt!

Ich probier mal nen anderen Kompiler!?
Gibt es ne Empfehlung von Euch??
 

Marco13

Top Contributor
Eine Empfehlung, die ich aus "politischen" Gründen nur ungern abgebe: Visual studio. Damit treten z.B. die Probleme mit den Funktionsnamen nicht auf, das ist ja auch ein "echter" Windows-Compiler. Aber ein 800 MB-ISO-Download ist die Sache vielleicht wohl nicht wert....
 
G

Gastredner

Gast
Hm...muss man eigentlich die Funktionsimplementierung auch nochmal in das "extern 'C'" schachteln oder ist das nur bei der Deklarierung im Header nötig?
 

Marco13

Top Contributor
Also, hab nochmal geschaut, das was ich meinte bezog sich eigentlich darauf, dass man bei der Verwendung von .lib-Dateien, die für Visual Studio gedacht sind, ziemlich rumfrickeln muss, um für MinGW dieses Problem mit den "@12"'s hinter den Namen zu beheben, aber hier tritt im Prinzip schon das gleiche Problem auf. Das ganze sollte funktionieren, wenn man es mit

g++ -IC:/XXX/jdk/include -IC:/XXX/jdk/include/win32 -IC:/XXX/normalesCompilerIncludeVerzeichnisFallsDuDasBrauchst -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.c

compiliert. (Wie du mit dem gcc ein Programm compiliert hast, wo iostream verwendet wird, ist mir nicht ganz klar, aber vielleicht meintest du ja den g++). Dieser magische Parameter bewirkt wohl grob, dass er die Methoden sowohl MIT als auch OHNE dieses "@12" anbietet...
 

Taramsis

Bekanntes Mitglied
Vielen Dank Marco 13 jetzt klappt es! Ich hatte es gestern auch mit Visual Studio zum laufen gebracht, aber die 30 Tage Lizenz läuft ja irgendwann ab!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem mit dem Lesen einer projektinternen .csv aus der runnable JAR Allgemeine Java-Themen 3
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben