为什么 hotspot jvm 在其 JNI 模块中使用 extern "C"?
why does hotspot jvm use extern "C" in its JNI modules?
既然jvm本身是用c++实现构建的,为什么还要声明extern "C"?
extern "C" 用于生成与 c 兼容的目标,为什么 c++ jvm 需要它?
JNI 的一个优点是您可以编译一次并link它到该平台的任何 JVM。现在这不是什么问题,因为几乎所有 JVM 都基于 OpenJDK,但曾几何时,有几个 JVM 具有完全不同的实现。我在 Windows 上编译的 JNI 库可以 link 到 Sun JVM 或 Microsoft JVM。使用“C”linkage 确保兼容性,无论我使用什么编译器,或者 JVM 是用什么编译器构建的。名称不会被破坏,参数不会被修改等
既然jvm本身是用c++实现构建的,为什么还要声明extern "C"?
extern "C" 用于生成与 c 兼容的目标,为什么 c++ jvm 需要它?
JNI 的一个优点是您可以编译一次并link它到该平台的任何 JVM。现在这不是什么问题,因为几乎所有 JVM 都基于 OpenJDK,但曾几何时,有几个 JVM 具有完全不同的实现。我在 Windows 上编译的 JNI 库可以 link 到 Sun JVM 或 Microsoft JVM。使用“C”linkage 确保兼容性,无论我使用什么编译器,或者 JVM 是用什么编译器构建的。名称不会被破坏,参数不会被修改等