Java 9 中 libjvm.so 和 libjvm.dylib 的标准位置是什么

Per*_*ner 6 java-native-interface java-9

当我的(C)程序嵌入 Java 9 时,我试图找出要传递给链接器的文件的标准化位置。libjvm.so即(Linux/Solaris) 和libjvm.dylib(macOS)的“正确”路径。这样我的构建脚本等才能在未来安全。

Java 9 更改了 Java 安装的布局 ( JEP 220 ),以便使文件布局标准化,但我看到的所有文档都没有正确libjvm描述Linux 上 Java 9 的 Oracle 和 OpenJDK 版本中共享库的位置和macOS。

那么,有更新的权威文档吗?

JEP 220(声称已“交付”,作为JSR 376 的一部分:JavaTM 平台模块系统,它是 Java 9 的一部分)说:

Linux、macOS 和 Solaris 上的 lib 目录包含运行时系统的动态链接本机库,就像现在一样。这些名为 libjvm.so 或 libjvm.dylib 的文件可以通过嵌入运行时系统的程序进行链接。

(类似的描述在几个相关的错误跟踪器问题和网络上重复出现。)

但该描述并未描述当前(最终)版本。相反,他们似乎都将动态​​库放在lib/server/,而不是lib/.

(OpenJDK,至少在 Ubuntu 上,与JEP 220中描述的布局有额外的偏差。)

请注意,我只对链接完整的 JDK 安装感兴趣,例如从 Oracle 或 OpenJDK 获取的安装。我不会构建自己的安装,也不会随我的应用程序分发 java 运行时库的副本。