2012-12-16 7 views
5

Ich habe Visual Studio C++ Project, das einige Java-Funktionalität aufrufen muss. Ich werde JNI verwenden. Ich habe angegeben zusätzlich enthalten Verzeichnisse:Java. JNI. jvm.dll

C:\Program Files (x86)\Java\jdk1.7.0_10\include

C:\Program Files (x86)\Java\jdk1.7.0_10\include\win32

und zusätzliche Bibliotheksverzeichnis

C:\Program Files (x86)\Java\jdk1.7.0_10\lib

und konnte benötigten Code kompilieren. Aber ich kann immer noch führen Sie es nicht, weil der nächste Fehler:

The program can't start bacause jvm.dll is missing...

Ich gehe davon aus, der einfachste Weg ist nur die DLL in das Projektverzeichnis zu kopieren. Aber ich weiß nicht welche. Ich fand zum Beispiel einige andere von ihnen:

C:\Program Files (x86)\Java\jdk1.7.0_10\jre\bin\client\jvm.dll

C:\Program Files (x86)\Java\jdk1.7.0_10\jre\bin\server\jvm.dll

C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll

Also, was soll ich kopieren?

Antwort

3

Sie versuchen, das Problem am falschen Ende zu lösen. Es wird nicht erwartet, dass Sie jvm.dll kopieren, sondern eine geeignete JAVA_HOME Umgebungsvariable, die entweder auf C:\Program Files (x86)\Java\jdk1.7.0_10\ oder C:\Program Files (x86)\Java\jre7\ zeigt. Die Version der DLL wird dann durch java Parameter -client oder -server (Standard, wenn kein Parameter) ausgewählt.

Update: jetzt erneut lesen der Frage, ich sehe, dass das Szenario native Programm ausgeführt wird und JVM von ihm aufrufen, nicht (häufiger) native lib von JVM aufrufen. In diesem Fall benötigt das native Programm wirklich Zugriff auf jvm.dll. Wenn die native lib von JVM aufgerufen wird, ist jvm.dll bereits von JVM vorgeladen, und die native lib muss sich nicht darum kümmern.

+0

Es ist nicht genug, nur 'JAVA_HOME' zu setzen. Zusätzlich muss der Pfad zur 'jvm.dll' definiert werden (oder die DLL muss nur kopiert werden). Was ist der Unterschied zwischen Client- und Serverversion? Habe ich nur diese zwei DLLs im System oder gibt es andere? – Andrew

+0

Client und Server sind fast identisch, nur für bessere Leistung abgestimmt, wenn sie als benannte verwendet werden. Aber nichts Schlimmes passiert, wenn Sie den anderen benutzen. –