JAVAJNI。jvm.dll 我有VisualStudioC++项目,它需要调用一些java功能。我将使用JNI。我已指定其他包含目录:

JAVAJNI。jvm.dll 我有VisualStudioC++项目,它需要调用一些java功能。我将使用JNI。我已指定其他包含目录:,java,java-native-interface,Java,Java Native Interface,C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\include C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\include\win32 和附加库目录 C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\lib 并且能够编译所需的代码。但由于下一个错误,我仍然无法运行它: 程序无法启动,因为缺少jvm.dll… 我想,最简单的方法就是将dll复制到项目目录中。但我不知道是哪一个。例如,我发现它们几乎没有

C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\include

C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\include\win32

和附加库目录

C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\lib

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

程序无法启动,因为缺少jvm.dll…

我想,最简单的方法就是将dll复制到项目目录中。但我不知道是哪一个。例如,我发现它们几乎没有什么不同:

C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\jre\bin\client\jvm.dll

C:\ProgramFiles(x86)\Java\jdk1.7.0\u 10\jre\bin\server\jvm.dll

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


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

您试图在错误的一端解决问题。您不需要到处复制
jvm.dll
,而是要设置一个适当的
JAVA\u HOME
环境变量,指向
C:\Program Files(x86)\JAVA\jdk1.7.0\u 10\
C:\Program Files(x86)\JAVA\jre7\
。然后由
java
参数
-client
-server
选择DLL的版本(无参数时默认)


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

仅仅设置
JAVA\u HOME
是不够的。此外,必须定义
jvm.dll
的路径(或者必须仅复制dll)。客户端和服务器版本之间有什么区别?系统中是否只有这两个DLL?或者还有其他DLL?客户端和服务器几乎相同,只是在按命名使用时进行了优化以获得更好的性能。但是当你使用另一个的时候,没有什么不好的事情发生。