DevOps系列之 JNI实现Java调用C的实现案例

2024-01-01 13:42:43

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。

文章来源:https://blog.csdn.net/Coder_Boy_/article/details/135324094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。