【问题标题】:jvm.dll seems incompatible with Visual Studio 2013jvm.dll 似乎与 Visual Studio 2013 不兼容
【发布时间】:2015-02-26 23:17:55
【问题描述】:

我正在使用 LoadLibrary() 将(服务器)jvm.dll 动态加载到我的 64 位 Visual Studio 2013 C++ 应用程序中,以便使用 JNI 执行本机 Java 代码。

在 VS 调试器中,当 dll 正在加载时,我遇到了一些访问冲突(但如果我在这些之后“继续”,事情似乎可以正常工作);然后在调用一些 JNI 调用时发生严重崩溃。我已经尝试过 Java 1.7 和 Java 1.8 中的 jvm.dll,但遇到了同样的问题。

我怀疑问题是运行时库不兼容。 Dependency walker 表明即使是最新的 jvm.dll 也依赖于 msvcr100.dll(来自 Visual Studio 2010)。我听说过使用不兼容的运行时版本的后果的可怕警告;并在其他情况下亲眼目睹了结果。

还有其他人遇到过这个问题吗?是否有针对 Visual Studio 2013 编译的可用 jvm.dll 版本?

谢谢, 丹

【问题讨论】:

    标签: c++ visual-studio-2013 jvm msvcrt


    【解决方案1】:

    就在最近(2015 年 2 月),我编译了一个 JNI 应用程序,它调用 JVM 来运行 Java 程序。我使用了最新的 JRE 版本 (1.8.0_31) 和 Visual Studio 2013。我还在运行时加载了 jvm.dll。如果您想了解我如何设置 JNI 调用,请查看 this post

    所以有可能... 确保包含 jvm.dll 的 JRE 是为与 Visual Studio 项目相同的体系结构(32 位或 64 位)构建的。如果您使用 64 位,您可能需要添加 x64 作为您的配置。为此,请访问:

    Solution --> Properties --> Configuration Properties

    还要确保您的包含/库是正确的。 对于我的项目,我需要包括以下内容:

    C:\Program Files\Java\jdk1.8.0_31\include
    C:\Program Files\Java\jdk1.8.0_25\include\win32
    

    另外,我需要包含jvm.lib,它位于:

    C:\Program Files\Java\jdk1.8.0_31\lib
    

    确保您还将jvm.lib 添加到链接器输入中。或者,您可以使用预处理器:

    #pragma comment(lib, "jvm.lib")
    

    希望这有助于正确配置您的项目。如果您仍然遇到错误,我建议您完全卸载 Java,然后重新安装。也许与 Visual Studio 2013 相同...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多