带有 JNI 的 C++ 应用程序抛出错误“找不到 jvm.dll。重新安装应用程序可以修复....”

Posted

技术标签:

【中文标题】带有 JNI 的 C++ 应用程序抛出错误“找不到 jvm.dll。重新安装应用程序可以修复....”【英文标题】:C++ application with JNI throws an error "jvm.dll not found . re-installing the application could fix ...." 【发布时间】:2012-11-13 14:40:41 【问题描述】:

我在 VC6 中编写了一个普通的 C++ 应用程序,它使用 jni 来调用 java 中的一个方法。为此,我在项目目录中包含了 jni.h 和其他 lib 文件夹。

代码可以编译,但是当我运行应用程序时,它会提示“找不到 jvm.dll。重新安装应用程序会修复它”。但是 jvm.dll 存在于我的电脑中。

如果我将应用程序的工作目录设置为 jvm.dll 所在的位置,那么它就像一个魅力。我无法将应用程序的工作目录设置为 jvm.dll 的目录,因为这个应用程序将来会是一个 dll。

我也尝试将系统变量中的 PATH 变量更新为 jvm.dll 的位置,但没有任何效果..

我怀疑 jvm.lib 正在从我的应用程序未提供的某个目录位置加载 jvm.dll .. 因此它失败了,..

请告诉我出了什么问题。

提前致谢。

问候 拉加文德拉

【问题讨论】:

【参考方案1】:

它无法显示“找不到 jvm.dll。重新安装应用程序将修复它”。

显然这是您自己的错误消息,或者 Windows': 不是 Java 的,这是不正确的。重装应用可能不会影响jvm.dll是否可以找到。

您需要确保 jvm.dll 在您的 PATH 上。

【讨论】:

@user1821083 那你没做对。 PATH 需要包含一个包含jvm.dll 的目录。 @user1821083 请确保您添加的路径是 jvm.dll 而不是 jvm.lib。我刚才也犯了同样的错误。我可以确认这个答案允许程序正常运行。如果您需要更多帮助,我很乐意提供帮助,但首先让您在 cmd shell 中发布以下命令的结果:“echo %PATH%”。 EJP-仅供参考,该错误消息是 Windows,而不是用户生成的。 @StockB 在这种情况下仍然不正确。需要重新安装的是 Java,而不是应用程序,尽管从 Windows 的角度来看,它们都是一样的。然而,由于确实安装了 Java,问题出在其他地方。无论它来自哪里,都不是一个很好的错误消息。 在我的情况下,Java 不需要重新安装,并且重新安装 Java 似乎没有正确地将 jvm.dll 目录添加到 PATH 环境变量中。我不得不手动添加它。【参考方案2】:

即使我的 PATH 配置为 StockB 所描述的,我也遇到了同样的错误。将 DLL 复制并粘贴到我的工作目录中解决了这个问题。就我而言,这是../x64/Debug。

【讨论】:

以上是关于带有 JNI 的 C++ 应用程序抛出错误“找不到 jvm.dll。重新安装应用程序可以修复....”的主要内容,如果未能解决你的问题,请参考以下文章

c++文件中jni库找不到报红

在JAVA中用JNI调用C++程序报错,说找不到所依赖的库。

使用 Qt/C++ 通过 JNI 调用 Java 代码。 FindClass 找不到类

犰狳 C++ 找不到矩阵逆

为啥某些带有双反斜杠的路径抛出找不到路径异常的一部分?

ng build 抛出错误:“试图找到引导代码,但找不到。”