美文网首页
JNI:Java代码调用本地代码

JNI:Java代码调用本地代码

作者: BUG弄潮儿 | 来源:发表于2022-03-01 20:59 被阅读0次

    1. JNI概述

    JNI 是 Java Native Interface 的简称

    • Java是跨平台的编程语言,但是在有些时候仍然是有需要调用本地代码(这些代码通常是由 C 与 C++ 编写的)。

    • JNI 是 Java 平台的一个功能强大的接口。这个 JNI接口提供了Java与操作系统本地代码相互调用的功能。

    2. C/C++代码的步骤

    • 在 Java 类中声明一个native方法
    public native void sayHello();
    
    • 使用 javah 命令生成包含 native 方法声明的C/C++头文件
    javah com.omg.NativeLib
    
    • 将生成的C/C++头文件来编写C/C++源文件
    #include<iostream>
    #include "com_omg_NativeLib.h"
    using namespace std;
    
    JNIEXPORT void JNICALL Java_com_olive_NativeLib_sayHello (JNIEnv *, jobject){
        cout << "hello world" << endl;
    }
    
    • 将C/C++源文件编译成动态链接库(windows对应DLL,Linux对应so)

    • 把dll文件的路径添加到环境变量PATH中

    • 在Java类中加载dll文件,然后调用声明的native方法

    System.load("C:\\lib\\NativeCodeJni.dll");
    NativeLib nl = new NativeLib();
    nl.sayHello();
    
    或者
    
    System.loadLibrary("NativeCodeJni");
    NativeLib nl = new NativeLib();
    nl.sayHello();
    

    3. 使用JNI弊端

    • 使用了 JNI,那么这个Java Application 将不能跨平台了。如果需要移植到别的平台上,那么需要重新编写native代码
    • Java 是强类型的语言,而 C/C++并不是。因此,在编写JNI时要更小心
    • 总之,必须在构建Java程序的时候,尽量少用本地代码

    Visual studio环境配置

    相关文章

      网友评论

          本文标题:JNI:Java代码调用本地代码

          本文链接:https://www.haomeiwen.com/subject/ygsjrrtx.html