Java的.JNI.的jvm.dll

And*_*rew 6 java java-native-interface

我有Visual Studio C++项目,它必须调用一些java功能.我打算用JNI.我已指定其他包含目录:

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

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

和其他库目录

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

并能够编译所需的代码.但由于下一个错误,我仍然无法运行它:

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

我假设,最简单的方法是将dll复制到项目目录中.但我不知道哪一个.例如,我发现它们很少有不同之处:

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

那么,我应该复制哪一个?

Pav*_*nek 4

你试图以错误的方式解决问题。您不应该jvm.dll四处复制,而是设置一个正确的JAVA_HOME环境变量,指向C:\Program Files (x86)\Java\jdk1.7.0_10\C:\Program Files (x86)\Java\jre7\java然后通过参数-client或(无参数时默认)选择DLL的版本-server

更新:现在重新阅读这个问题,我发现该场景正在运行本机程序并从中调用 JVM,而不是(更常见)从 JVM 调用本机 lib。在这种情况下,本机程序确实需要访问jvm.dll. 当从JVM调用native lib时,jvm.dllJVM已经预加载了native lib,native lib不需要关心它。