Java libjli库的作用是什么?

10

我正在使用JNI,以允许C代码卸载一些最好在Java中完成的工作。在这个问题中,我试图链接libjvmlibjli库,使我的代码能够运行,但现在我在质疑我是否需要JLI库。

我找不到任何明确说明JLI库用途的文档。

这个其他SO问题暗示了JLI是一些OSX穿透库:

#elif defined(__APPLE__)
// jli needs to be loaded on OSX because otherwise the OS tries to run the system Java

正如这篇博客所述:

在 OSX 上编译时,非常重要的一点是先链接 jli 库,再链接 jvm 库。

我的问题:

  1. JLI库是用来做什么的?
  2. 我在 RedHat/CentOS-only 环境中进行 C/Java JNI开发时是否需要它?(没有 OSX)
1个回答

4

JLI库是用来做什么的?

libjli.so 包含一个启动器接口,用于准备在命令行中传递的参数,并使用它们启动虚拟机。

启动器 main.c 是所有Java程序的主入口点。它准备C命令行参数并将它们传递到 JLI_Launch 函数中,该函数执行参数解析,从 libjvm.so加载虚拟机,分叉原始线程,然后 将控制权传递给JVM

在仅限于RedHat/CentOS环境(没有OSX)的C/Java JNI开发中是否需要它?

非常不可能。如果需要,您很可能做错了什么。至少我无法想象出任何有用的通用用例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接