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?客户端和服务器几乎相同,只是在按命名使用时进行了优化以获得更好的性能。但是当你使用另一个的时候,没有什么不好的事情发生。