我有Visual Studio C ++ Project,它必须调用一些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
那么,我应该复制哪一个?
答案 0 :(得分:4)
您正试图在错误的一端解决问题。您不应该复制jvm.dll
,而是设置正确的JAVA_HOME
环境变量,指向C:\Program Files (x86)\Java\jdk1.7.0_10\
或C:\Program Files (x86)\Java\jre7\
。然后,java
参数-client
或-server
选择DLL的版本(没有参数时默认)。
更新:现在重新阅读这个问题,我看到该场景正在运行本机程序并从中调用JVM,而不是(更常见)从JVM调用本机lib。在这种情况下,本机程序确实需要访问jvm.dll
。从JVM调用本机lib时,jvm.dll
已经由JVM预加载,而本机库不需要关心它。