# [JNI] DLL erstellen



## Hutmacher (27. Dez 2009)

Ich versuche gerade, mithilfe der JNI - erst einmal zum Testen - eine Funktion aufzurufen, die in C/C++ geschrieben ist.

Dafür habe ich zuerst einmal die Klasse (Counter) geschrieben, die die native Methode kapselt und dazu zum Testen eine Main-Klasse (Count), und beides kompiliert. Weiterhin habe ich dann einen Header für die Methode mithilfe von _javah_ erstellen lassen und dann auch als .c-Datei die Methode geschrieben.





Damit ich das alles aber verwenden kann, brauche ich eine Library, sprich bei mir eine *DLL.*

Bisher habe ich mich an der Java-Insel entlanggehangelt, aber hier verstehe ich nun absolut nicht mehr, wie ich eine DLL zu erstellen habe: Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek .

*Die Frage ist also:*
Wie erstelle ich jetzt mit meinem Header (Counter.h) und meiner Methode (countUpTo.h) eine DLL?

_PS: Als C/C++-Compiler hab ich hier GCC rumliegen._


----------



## yxcvbn (27. Dez 2009)

Hallo 

wo du jetzt genau nicht weiterkommst weiß ich nicht aber hast du das hier gelesen: http://www.java-forum.org/spezialthemen/35582-jni-windows-anleitung.html ?


----------



## Marco13 (27. Dez 2009)

Wenn du ANT hast, kannst du die dort beschriebene build.xml verwenden. Ansonsten wäre der Ansatz sinngemäß, den in der build.xml verklausilierten Bewefhl per Hand auszuführen:
gcc -mno-cygwin -I C:/Programme/Java/jdk1.6.0/include -I C:/Programme/Java/jdk1.6.0/include/win32 -shared -Wl,--add-stdcall-alias -o ./strlen.dll ./strlen.c
Die Namen ("strlen") und Verzeichnisse natürlich entsprechend angepasst...


----------



## Gastredner (27. Dez 2009)

Ich hab für meine Bastelei mit JNI die C Development Tools für Eclipse (Eclipse CDT, zusammen mit dem C-Compiler aus MinGW) verwendet.
Du schreibst deinen Java-Code, wandelst das Projekt in der C-Perspektive in ein C-Projekt um und musst womöglich noch ein oder zwei der Argumente, die Ullenboom in der Insel angibt, bei den Preferences für Compiler und/oder Linker hinzufügen - dann klappt es. Ist ein bisschen Bastelei, aber danach hatte ich keine Probleme mehr.
Wichtig: Es muss ein C- und *kein* C++-Projekt sein! Dann nimmt er immer den g++ statt den gcc und damit geht es nicht.


----------



## Hutmacher (27. Dez 2009)

yxcvbn hat gesagt.:


> Hallo
> 
> wo du jetzt genau nicht weiterkommst weiß ich nicht aber hast du das hier gelesen: http://www.java-forum.org/spezialthemen/35582-jni-windows-anleitung.html ?


Jep, das hab ich schon gelesen, aber das verDLLen hat da bei mir nicht geklappt, weil diese "Cl" nicht funktioniert hat - ich habe Vista - und bei "windows compiler cl download" fand ich nur Schrott^^



Marco13 hat gesagt.:


> Wenn du ANT hast, kannst du die dort beschriebene build.xml verwenden. Ansonsten wäre der Ansatz sinngemäß, den in der build.xml verklausilierten Bewefhl per Hand auszuführen:
> gcc -mno-cygwin -I C:/Programme/Java/jdk1.6.0/include -I C:/Programme/Java/jdk1.6.0/include/win32 -shared -Wl,--add-stdcall-alias -o ./strlen.dll ./strlen.c
> Die Namen ("strlen") und Verzeichnisse natürlich entsprechend angepasst...


Danke! Perfekte Lösung. 
Nur zuerst gab es immer "No such file ... for jni.h"-Errors, weil - wie ich jetzt auch weiß - die Header bei mir in C:/Programme/Java/include liegen.



Gastredner hat gesagt.:


> Ich hab für meine Bastelei mit JNI die C Development Tools für Eclipse (Eclipse CDT, zusammen mit dem C-Compiler aus MinGW) verwendet.
> Du schreibst deinen Java-Code, wandelst das Projekt in der C-Perspektive in ein C-Projekt um und musst womöglich noch ein oder zwei der Argumente, die Ullenboom in der Insel angibt, bei den Preferences für Compiler und/oder Linker hinzufügen - dann klappt es. Ist ein bisschen Bastelei, aber danach hatte ich keine Probleme mehr.
> Wichtig: Es muss ein C- und *kein* C++-Projekt sein! Dann nimmt er immer den g++ statt den gcc und damit geht es nicht.


Danke auch für den Tipp. Aber ich wollte JNI wirklich nur einmal ausprobiert haben und keine großen Projekte anfangen, weswegen das etwas übertrieben wäre


----------



## Gastredner (28. Dez 2009)

Hutmacher hat gesagt.:


> Danke auch für den Tipp. Aber ich wollte JNI wirklich nur einmal ausprobiert haben und keine großen Projekte anfangen, weswegen das etwas übertrieben wäre


Ich hab damit bisher auch nur das Beispiel aus der Insel + ein paar Spielereien bearbeitet.
Wenn man nicht gerade knapp an Platz auf der Platte ist, so ist das eine ganz angenehme Sache - vor allem aufgrund der sehr komfortablen Auto-Vervollständigungen der Eclipse-Editoren.


----------

