【问题标题】:OSX - Compiling a Java JNI application to run with only JRE installedOSX - 编译 Java JNI 应用程序以仅安装 JRE 运行
【发布时间】:2017-10-18 00:46:21
【问题描述】:

我正在编写一个使用 JNI 创建 Java 虚拟机并在其上运行一些代码的本机应用程序。此应用程序旨在分发给其他人使用,因此它需要在其他计算机上运行,​​而不仅仅是我的计算机。这一切在 PC 上运行良好,但在 Mac 上,有各种各样的问题。

如果我使用 Xcode 内置的 Java 框架,那么我可以使用 JNI,前提是我的所有代码都编译为 Java 版本 6 —— 因为 Xcode 的 Java 框架显然终止了对 Java 6 的支持。

如果我安装 JDK 并巧妙地链接到 libjvm.dlib、libjli.dylib 和 libjava.dylib 文件,我可以使用更高版本的 Java。在这种情况下,一切都运行良好,这非常酷。所以我尝试在另一台没有安装 JDK 的 Mac 上运行它,只安装了 JRE,我发现它不起作用!虽然 jre/lib/server/libjvm.dylib 存在于 JDK 中,但事实证明它不存在于 JRE 中。

我的问题是:有没有什么方法可以创建一个 Java 8 或 Java 9 VM,它只安装了 JRE 而不是 JDK,可以在 Mac OSX 上运行?

【问题讨论】:

  • 尝试通过dlopen 加载jre/lib/server/libjvm.dylib 并以这种方式调用函数。我和你有同样的问题,没有找到解决办法。到目前为止,我动态链接,它在我自己的 comp 上运行良好。我使用getenv("JAVA_HOME") 来查找JRE。
  • “没用!” - 我们将需要更多继续。它究竟是如何失败的?我的第一个猜测是您没有正确设置 dylib @executable_paths,但这只是一种预感。
  • 嗨 Brandon,这是一个很好的解决方案,但我的主要问题是如果您只安装 Java Runtime Envrionment 而不是 Java,那么 jre/lib/server/libjvm.dylib 似乎不存在开发套件。有没有办法让它只与 JRE 一起工作?
  • Ssswift,正如我解释的那样,它不起作用,因为当您只安装 JRE 时似乎没有包含 libjvm.dylib。它似乎需要安装整个 JDK。

标签: java macos


【解决方案1】:

嗯...我不完全确定我理解你的要求,但我会根据问题对我来说是什么来回答。我不得不问,您是否确保将 Java 程序正确打包到 .jar 文件中?如果这不是问题,我会说我通常知道您可以在 Java 中捆绑库和其他包。老实说,我不知道这是否适合您,因为我不知道您提到的那些文件,但这可能是您的解决方案。

抱歉,我无法提供更多信息。希望其他人会更熟悉 Java 的这个特定部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多