6

我有 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

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

4

1 回答 1

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 调用本机库。在这种情况下,本机程序确实需要访问jvm.dll. 从 JVM 调用本机库时,jvm.dll已经由 JVM 预加载,本机库不需要关心它。

于 2012-12-17T16:21:30.670 回答