Java native Interface

Technoblade

Erfahrenes Mitglied
Hi,

Ich habe mir letztens mal C++ beigebracht mit einem Buch und wollte, da ich normalerweise hauptsächlich mit Java arbeite, jetzt gerne auch mal Das Java Native Interface einsetzen.
Ich hoffe hier das richtige Forum erwischt zu haben, da es ja eine Mischsache ist ...
Bis zum Übersetzen der cpp-Datei hat auch alles wunderbar funktioniert.
Zur Info:
ich verwende momentan JDK 6 U 14 und als Compile die akuelle Version des Gnu-Compilers im Cygwin-Paket.
Hier erst mal meine cpp-Datei:

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

JNIEXPORT void JNICALL 
Java_Test_testen(JNIEnv *env, jobject obj)
{
    cout << "Es klappt!" << endl;
}

Zum Übersetzen habe ich folgenden Befehl verwendet:

g++ -I C:/Programme/Java/jdk1.6.0_14/include -shared Test.cpp -o Test.dll

Das -I, damit jni.h gefunden wird.
Allerdings werde ich jetzt mit Unmengen von Fehlermeldungen aus jni.h beworfen. So viele, dass nichtmals mehr alle auf der Konsole angezeigt werden.

Kann das an dem -I liegen? Und wenn ja, wie behebe ich es?

Vielen Dank schon im Vorhinein.
 
@genodeftest
naja ... das nützt TO ja auch nichts wenn er seine C++-Source noch nicht mal compiled bekommt ...

@TO
stell die frage lieber mal im C++-Forum und poste mal die gesamte Fehlermeldung
dazu einfach an deinen gcc-Aufruf das hier anhängen
Code:
gcc -I PFAD -shared OBJECT -o OUTPUT > error.log
damit wird der gesamte Output von gcc in die Datei error.log umgeleited ...

btw : liegt es vllt daran das du g++ aufrufst ... das File aber eigentlich gcc heißt ? Weil ein+-Zeichen ist unter Win ein nicht erlaubtes Dateinamen-Zeichen ... also garnicht möglich ...
 
Zuletzt bearbeitet von einem Moderator:
@Spike An dem +-Zeichen kann es nicht liegen, da die Konsole die ich benutze nicht direkt das cmd von Windows ist. Das ist die Konsole von cygwin, die eine Bash emuliert.
Und den Fehler Posten geht praktisch nicht, da die Ausgabe wie besagt schon zu lang für die Konsole ist. Also höchstens als Anhang.

@genodeftest
Ne, es bringt mir nicht wirklich etwas. Es geht mir ja nicht darum die Möglichkeit zu haben C++-Bibliotheken zu verwenden. Es geht darum, dass ich durch Auslagerung von Algorithmen ggf. eine höhere Performanz erreiche. Oder auch darum, dass einige Programmteile sich einfach besser in C++ schreiben lassen. Dennoch vielen Dank für den Hinweis auf JNA. Zumindest für Bibliotheken die bereits existieren ist das wirklich gut zu wissen.

Ich denke ich werde mein Problem dann nochmals im C++-Forum posten.
Danke für eure Hilfe.
 
@Technoblade
les dir mal meine Code-Zeile genau durch ... worauf ich hinaus wollte ist die PIPE am Ende ...
Code:
> error.log
damit leitest du nämlich die gesamte ausgabe in eine datei um ...
wenn ich das noch richtig in erinnerung hab kann man unter Unix *also auch unter CygWin* sogar System.out und System.err durch entsprechende Pipes in zwei unterschiedliche Dateien schreiben ... was aber nicht mehr genau wie das ging.
 
^^ ich hatte das schonmal ausprobiert mit der zieldatei und hatte mich dann gewundert, dass die leer ist, aber wo du gerade das mit dem ErrorStream sagst wird mir auch klar warum.
Und dank meiner tollen Scripte von der LPI weiß ich jetzt auch wieder wie das geht :D
mit
Befehl 2> err.log

leitet man die Fehlerausgabe von Befehl in err.log um.
 
Ja genau ... irgendwie sowas hatte ich auch noch im Kopf.
Hatte mal OpenSuSE so als zweites System und hab n bissl mit den Boot- und Shutdown-Scripten rumgespielt und da gabs in den meisten Scripts sowas wie
Code:
command 1>/dev/null 2>/dev/null
oder so änlich um die Fehlermeldungen wärend des Startups zu unterdrücken. Einige wurden auch ins boot.log umgeleitet und andere halt in zwei verschiedene Dateien.
Das jetzt aber auch andere Programme außer unser allseits bekanntes Java ZWEI Output-Streams hat ist für mich jetzt erlich gesagt neu. Dachte das wäre ne besonderheit von Java.
 
Zurück