# JNI - Problem beim Erstellen der .dll



## GUI-Programmer (11. Mai 2012)

Hallo zusammen!

Ich habe mich nun mal daran versucht, mit JNI zu arbeiten. Dabei bin ich ganz nach diesem Thread vorgegangen: JNI Windows Anleitung
Allerding kommt bei mir beim (bzw. davor) Erstellen der .dll Datei folgende Fehlermeldung:







Ich hab auch schon Microsoft Visual C++ 2010 Express installiert, und es irgendwie damit versucht, doch das Programm ist sehr mächtig und noch komme ich nicht so ganz damit zu Recht.

Also meine Frage: Wie kann ich ganz simple meinen ersten JNI Versuch erfolgreich durchführen - was hat es mit der Fehlermeldung auf sich?


----------



## Marco13 (11. Mai 2012)

Wenn nicht mit Visual C, wie startest du das denn sonst - also, die CL.EXE ist ja teil von Visual Studio... 
Kann's sein dass da bei der Installation was schiefgegangen ist, vielleicht wegen irgendwelcher Fehlender Admin-Rechte oder so...?


----------



## GUI-Programmer (11. Mai 2012)

Glaube zwar nicht, dass irgendwas bei der Installation schief gelaufen ist, aber man weiß ja nie. Darf ich denn all diese Microsoft Visual C++ Programm so ohne Weiteres deinstallieren?


----------



## Marco13 (11. Mai 2012)

Hui... welche davon man jetzt deinstallieren "darf", weiß ich nicht. Schon die Redistributables sind kritisch, weil die vielleicht von anderen Programmen gebraucht werden. Ein einfaches "Drüberinstallieren" wäre ein erster möglicher Versuch.

Oder eine Websuche nach "mspdb100 dll" - das liefert z.B. den Hinweis, dass vielleicht nur die vsvars32 mal ausgeführt werden muss (z.B. mspdb100.dll is missing trying to run editbin.exe | Microsoft Connect ). GIBT es die Datei denn bei dir, und ist das entsprechende Verzeichnis im PATH?


----------



## GUI-Programmer (12. Mai 2012)

Das mit der .dll wäre somit nun erstmal geklärt. Das Ausführen von vcvars32.bat in der Konsole hat geholfen (Quelle: mspdb100.dll für cl.exe Compiler wird nicht gefunden - BoerseBZ)

Doch nun hat sich ein weiteres Problem ergeben, denn anscheinend wird jni.h nicht gefunden:

```
Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 16.00.30319.01 für 80x86

Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

cl : Befehlszeile warning D9024 : Unbekannter Typ der Quelldatei "–Ic:\java\incl
ude", Objektdatei wird angenommen.
cl : Befehlszeile warning D9024 : Unbekannter Typ der Quelldatei "–Ic:\java\incl
ude\win32", Objektdatei wird angenommen.
HelloWorldImp.c
HelloWorldImp.c(1) : fatal error C1083: Datei (Include) kann nicht geöffnet werd
en: "jni.h": No such file or directory
```

[OT]
Gute Nacht, werde mir mögliche Antworten erst morgen anschauen. 
[/OT]


----------



## Marco13 (12. Mai 2012)

Guten Morgen  Liegt die jni.h im angegebenen Verzeichnis? Wahrscheinlich ist es eher sowas wie
... I"C:\Program Files\Java\jdkX.Y.Z\include"
oder so...


----------



## GUI-Programmer (12. Mai 2012)

Danke, aber auch hiermit funktioniert das Ganze noch nicht:

```
Cl –I"C:\Program Files\Java\jdk1.7.0_03\include" –I"C:\Program Files\Java\jdk1.7.0_03\include\win32" -LD HelloWorldImp.c -Fehello.dll
```

Wieder dieselbe Fehlermeldung:

```
Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 16.00.30319.01 für 80x86

Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

cl : Befehlszeile warning D9024 : Unbekannter Typ der Quelldatei "–IC:\Program F
iles\Java\jdk1.7.0_03\include", Objektdatei wird angenommen.
cl : Befehlszeile warning D9024 : Unbekannter Typ der Quelldatei "–IC:\Program F
iles\Java\jdk1.7.0_03\include\win32", Objektdatei wird angenommen.
HelloWorldImp.c
HelloWorldImp.c(1) : fatal error C1083: Datei (Include) kann nicht geöffnet werd
en: "jni.h": No such file or directory
```

[EDIT]Da die Fehlermeldung was von Quelldatei aussagt, vermute ich mal, dass es nicht am Pfad liegt, sondern vielmehr irgendwie angegeben werden muss, dass in diesen Ordnern nach .h Dateien gesucht werden soll. Ich kenne mich mit C/C++ Dingen nunmal noch nicht so gut aus.[/EDIT]


----------



## Marco13 (12. Mai 2012)

Ja, das hat mich auch etwas irritiert. Ich verwende halt immer die IDE, und habe die CL.EXE glaub' ich noch nie von der Kommandozeile aus gestartet  Aber sehe jetzt spontan keinen Fehler: Durch das [c]-I[/c] sollte angegeben werden, dass danach ein include-Verzeichnis kommt. (Zumindest ist das bei allen C-Compilern so, die ich bisher von der Kommandozeile aus gestartet habe, und wird auch durch alles, was man so findet ( Java programming with JNI ) bestätigt). Ich dachte noch kurz, dass er wegen dem Leerzeichen rumzicken könnte, aber durch die Anführgzeichen sollte das egal sein... ???:L Falls es nicht klappt, probier' ich das morgen auch mal an einem PC wo VS drauf ist...


----------



## GUI-Programmer (17. Mai 2012)

Hat denn noch irgendjemand eine Idee oder zumindest das selbe Problem?


----------



## Marco13 (17. Mai 2012)

Vermutlich eher nicht, da jeder die IDE verwendet, und sich nicht den Krampf :autsch: antut, den CL direkt aufzurufen. Hab' mal gefrickelt: Wenn man die .C-Datei umbenennt zu .CPP, kann man mit

Cl -EHsc -I"C:\Programme\Java\jdk1.6.0_26\include" -I"C:\Programme\Java\jdk1.6.0_26\include\win32" -I"C:\Programme\Microsoft Visual Studio 8\VC\include" -LD HelloWorld.cpp -Fehello.dll /link /LIBPATH:"C:\Programme\Microsoft Visual Studio 8\VC\lib"

zumindest schonmal eine DLL compilieren. Will man das? Eher nicht...

Woran es lag? Bin nicht sicher, aber beim "copy + paste" deiner Kommandozeile waren einige der "-" offenbar zu einem "Gedankenstrich" umgewandelt worden, der keine ASCII-Repräsentation hat - lieber von Hand eintippen. (Noch :autsch: er  )


----------

