java 调用 jni 代码
时间: 2024-05-15 09:12:20 浏览: 94
Java调用JNI代码需要以下几个步骤:
1.编写C或C++代码实现所需的功能。
2.使用JNI提供的头文件将C或C++代码包装成Java可以调用的本地方法。
3.编译JNI代码生成本地库文件(DLL或SO文件)。
4.在Java代码中使用System.loadLibrary()方法加载本地库文件。
5.通过Java代码调用JNI方法。
下面是一个简单的示例,演示如何在Java中调用C++代码。
首先编写C++代码,实现一个求和函数sum:
```c++
#include <jni.h>
JNIEXPORT jint JNICALL Java_Sum_sum(JNIEnv *env, jobject obj, jint a, jint b) {
return a + b;
}
```
然后,使用JNI提供的头文件将C++代码包装成Java可以调用的本地方法:
```c++
JNIEXPORT jint JNICALL Java_Sum_sum(JNIEnv *env, jobject obj, jint a, jint b);
```
其中,Java_Sum_sum是本地方法的名称,参数列表包括JNIEnv *env、jobject obj和jint a、jint b。JNIEnv是一个指向JNI环境的指针,jobject是Java对象的引用。
接下来,编译JNI代码生成本地库文件。在Linux下,可以使用以下命令:
```bash
g++ -shared -fpic -I $JAVA_HOME/include -I $JAVA_HOME/include/linux Sum.cpp -o libsum.so
```
其中,$JAVA_HOME是Java安装目录。
在Windows下,可以使用以下命令:
```bash
g++ -shared -I %JAVA_HOME%\include -I %JAVA_HOME%\include\win32 Sum.cpp -o Sum.dll
```
接下来,在Java代码中使用System.loadLibrary()方法加载本地库文件:
```java
System.loadLibrary("sum");
```
最后,在Java代码中调用JNI方法:
```java
public class Sum {
public native int sum(int a, int b);
static {
System.loadLibrary("sum");
}
public static void main(String[] args) {
Sum s = new Sum();
System.out.println(s.sum(1, 2));
}
}
```
其中,native关键字表示这是一个本地方法,sum(int a, int b)是Java中调用的方法名。
运行Java代码,输出结果为3,即C++代码实现的求和结果。
阅读全文