1. Java中调用 C库函数
Java的JDK中包含了一份JNI使用的库文件。
在Java中调用C函数,相当于 Java中声明一个接口,在C中做实现。
1. 首先需要编写Java的源文件,同时在Java类中声明函数,如:
class HelloJNI
{
// 本地方法声明
native void printString(String);
}
注:在Java中不存在独立的函数,函数只能作为类的成员方法存在。native表明了这个函数是一个C中实现的接口。
将Java文件进行编译,使用 javah 工具,将类中的本地方法生成一个JNI的C接口头文件(注意必须要用这个头文件)。
2. 将从Java类中生成的头文件作为编译的动态模块(DLL或.so文件)的头文件(之一),将头文件中的函数进行实现。
从Java类中生成的本地函数的头文件,它的函数声明中,引用了 jni.h 头文件,其中定义了这些函数作为导出函数。
编译生成动态模块
3. 然后运行编译的Java类,java虚拟机加载生成的动态模块,调用模块导出的java类中声明的本地函数。
由javah生成的导出函数头文件函数是有特定格式的,不能修改。例如:
JN
Java的JDK中包含了一份JNI使用的库文件。
在Java中调用C函数,相当于 Java中声明一个接口,在C中做实现。
1. 首先需要编写Java的源文件,同时在Java类中声明函数,如:
class HelloJNI
{
// 本地方法声明
native void printString(String);
}
注:在Java中不存在独立的函数,函数只能作为类的成员方法存在。native表明了这个函数是一个C中实现的接口。
将Java文件进行编译,使用 javah 工具,将类中的本地方法生成一个JNI的C接口头文件(注意必须要用这个头文件)。
2. 将从Java类中生成的头文件作为编译的动态模块(DLL或.so文件)的头文件(之一),将头文件中的函数进行实现。
从Java类中生成的本地函数的头文件,它的函数声明中,引用了 jni.h 头文件,其中定义了这些函数作为导出函数。
编译生成动态模块
3. 然后运行编译的Java类,java虚拟机加载生成的动态模块,调用模块导出的java类中声明的本地函数。
由javah生成的导出函数头文件函数是有特定格式的,不能修改。例如:
JN