2012-12-16 16 views
5

Possiedo Visual Studio C++ Project, che deve chiamare alcune funzionalità java. Userò JNI. Ho specificato supplementari includono directory: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

e aggiuntivi directory di libreria

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

ed è stato in grado di compilare codice necessario. Ma io ancora non riesco a correre a causa del prossimo errore:

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

presumo, il modo più semplice è solo per copiare la DLL nella directory di progetto. Ma non so quale. Ho trovato, per esempio, alcuni di loro differenti:

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

Quindi, quale dovrei copiare?

risposta

3

Stai provando a risolvere il problema alla fine sbagliata. Non è previsto che copi jvm.dll in giro, ma per impostare una variabile di ambiente JAVA_HOME corretta, che punta a C:\Program Files (x86)\Java\jdk1.7.0_10\ o C:\Program Files (x86)\Java\jre7\. La versione della DLL viene quindi selezionata dal parametro java-client o -server (impostazione predefinita quando nessun parametro).

Aggiornamento: ora rileggendo la domanda, vedo che lo scenario esegue il programma nativo e invoca JVM da esso, non (più comune) invocando lib nativa da JVM. In tal caso, il programma nativo necessita realmente dell'accesso a jvm.dll. Quando invoca la lib nativa da JVM, jvm.dll è già precaricato da JVM e la lib nativa non ha bisogno di preoccuparsene.

+0

Non è sufficiente solo impostare 'JAVA_HOME'. Inoltre, è necessario definire il percorso per 'jvm.dll' (o dll deve essere solo copiato). Qual è la differenza tra la versione client e server? Ho solo queste due DLL nel sistema o ce ne sono altre? – Andrew

+0

Client e server sono quasi gli stessi, solo ottimizzati per prestazioni migliori se utilizzati come denominati. Ma non succede niente di brutto quando usi l'altro. –