2012-12-16 10 views
5

Bazı java işlevlerini çağırması gereken Visual Studio C++ Project'im var. JNI kullanacağım. Ben belirttiğiniz ek dizinleri içerir:Java. JNI'yı. jvm.dll

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

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

ve ek kütüphane dizini

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

ve gerekli kod derlemek başardı. Ama yine de, çünkü bir sonraki hata o koşamam:

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

sanıyorum, en basit yolu projesi dizine dll kopyalamak için adildir. Ama hangisini bilmiyorum. Yani

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

, bir ben kopyalamak gereken: Ben, örneğin, bunlardan birkaç farklı bulundu?

cevap

3

Sorunu yanlış sonda çözmeye çalışıyorsunuz. jvm.dll'u kopyalamayı beklemiyorsunuz, ancakortam değişkenini ayarlamak için C:\Program Files (x86)\Java\jdk1.7.0_10\ ya da C:\Program Files (x86)\Java\jre7\ işaretlerini işaretleyin. DLL sürümü daha sonra -client veya -server parametresi tarafından seçilir (varsayılan parametre yok).

Güncelleştirme: Şimdi soruyu yeniden okurken, senaryoyu yerel program çalıştırdığını ve JVM'yi JVM'den çağırdığını (daha yaygın) JVM'den native lib'i çağırdığını görmüyorum. Bu durumda, yerel programın gerçekten jvm.dll'a erişmesi gerekir. JVM'den native lib çağırırken, jvm.dll zaten JVM tarafından önceden yüklenmiştir ve yerel lib'in bununla ilgilenmesi gerekmez.

+0

Sadece JAVA_HOME'unu ayarlamak yeterli değil. Ayrıca jvm.dll dosyasının yolu tanımlanmalıdır (veya dll kopyalanmalıdır). İstemci ve sunucu sürümü arasındaki fark nedir? Sistemde sadece bu iki DLL var mı yoksa başkaları var mı? – Andrew

+0

İstemci ve sunucu neredeyse aynıdır, yalnızca adlandırılmış olarak kullanıldığında daha iyi performans için ayarlanmıştır. Ama diğerini kullanırken çok kötü bir şey olmaz. –