从 JNI 使用 jvm.h

Using jvm.h from JNI

目前我正在我的 JNI 应用程序中使用 JAVA_HOME/include 中的库。这包括

虽然这些为我提供了很多控制权,但我真的希望能够调用热点源代码中定义的实际 C++ 函数。我查看了JDK 8 的源代码,发现src/share/javavm/export 包含更多的头文件,例如jvm.h 具有更强大的功能。

我尝试将这些包含在我的项目中,但出现 unresolved external symbol 错误,可能是因为这些头文件不包含实际的函数定义。

如何在我的 JNI 代码库中使用这些函数?有可能吗?

提前致谢!

jvm.h 中声明的函数仅供内部 JDK 使用。它们不应该从用户代码中调用。它们不是任何 public API 的一部分,并且它们可以在任何(甚至是次要的)JDK 更新中更改。

可以通过将您的二进制文件链接到 libjvm 或使用动态查找来调用这些函数,即 dlopen / dlsym,但强烈建议不要使用未记录的 API,这会使您JNI 代码不能在不同 JDK 版本 and/or 构建之间移植。