JNI(Java Native Interface)允许Java代码与其他语言编写的代码进行交互。以下是一个简单的JNI示例,演示如何使用JNI在Java中调用C/C++函数。
最终的目录结构如下:
JNI(Java Native Interface)允许Java代码与其他语言编写的代码进行交互。以下是一个简单的JNI示例,演示如何使用JNI在Java中调用C/C++函数。
1. 创建Java类
首先,创建一个Java类,其中包含一个native方法。
public class NativeDemo {
static {
System.loadLibrary("NativeLib"); // 加载动态链接库
}
public native int add(int a, int b); // native方法
public static void main(String[] args) {
NativeDemo demo = new NativeDemo();
System.out.println("Result: " + demo.add(2, 3));
}
}
2. 生成JNI头文件
使用javah
工具从Java类生成C头文件。在命令行中执行以下命令:
javah -jni NativeDemo
这将生成一个名为NativeDemo.h
的头文件。
3 . 实现C/C++函数
在C/C++文件中实现头文件中声明的函数。例如,创建一个名为NativeDemo.c
的文件:
#include <jni.h>
#include "NativeDemo.h"
JNIEXPORT jint JNICALL Java_NativeDemo_add(JNIEnv *env, jobject obj, jint a, jint b) {
jint sum = a + b;
return sum;
}
4. 编译动态链接库
使用GCC编译器将C/C++代码编译为动态链接库
gcc -shared -o NativeLib.dll NativeDemo.c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -L"%JAVA_HOME%\bin"
这会生成一个名为NativeLib.dll
(Windows)或libNativeLib.so
(Linux)的动态链接库。
5.??运行Java程序
确保NativeLib.dll
(Windows)或libNativeLib.so
(Linux)位于Java的库路径中,然后运行Java程序:
编译Java字节码文件
javac NativeDemo.java
运行程序
java NativeDemo
这将输出“Result: 5”,因为2 + 3 = 5。