乐趣区

关于java:JNIJava代码调用本地代码

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 环境配置

退出移动版