JNI和它链接到的图书馆
问题描述:
我搜索了但没有找到这个“问题”的答案。基本上,通常需要包含jni.h头文件来访问jni函数,但头文件主要包含函数原型和结构声明,所以我们要么包含解析函数的源代码,要么包含一个静态或动态库(到目前为止还没有发现),所以链接器可以解析函数原型声明。JNI和它链接到的图书馆
到目前为止,我使用Android NDK构建本地库,我所做的只是包含jni.h头文件以使用jni函数,但即使在Oracle的文档和示例中,他们所做的只是包含jni.h头文件并指定包含编译器的目录,那么编译器如何找到实现?
答
编译器如何找到实现?
编译器没有找到实现中,JVM会告诉你他们在哪里动态:
JNIEnv
对于结构JNIEnv_
一个typedef。该结构包含一个名为functions
的const struct JNINativeInterface_*
和许多方法。如果您看一下JNI documentation,您会注意到大多数方法的第一个参数是JNIEnv*
,但是您可以用env->method(...)
来调用它们,而不要使用JNIEnv*
参数。文档中的方法是实际的方法,指向它们的指针位于functions
的JNIEnv_
中。 JNIEnv_
中的方法是简单地调用functions
中的方法指针的包装。只要JVM创建一个JNIEnv_
和相应的JNINativeInterface_
,它就会动态地写入所有的方法地址。
该文档引用了jvm.lib。 – EJP