目前我在我的 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 版本和/或构建之间移植。
关于java - 使用来自 JNI 的 jvm.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61633234/