调用 C 函数

Wu Jun 2020-01-04 03:43:49
Categories: > > Tags:

建议只在必需的时候才使用本地代码

Java 本地接口(JNI)

1 在 Java 声明本地方法

Java 使用 native 关键字表示本地方法,本地方法可以是静态的,也可以是非静态的。

class HelloNative{
    public static native void greeting();
}

2 生成包含该方法的 C 声明头文件

使用 javah 工具生成头文件

javah HelloNative

3 用 c 实现该本地方法

#include "HelloNative.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl)
{
    printf("Hello Native World!\n");
}

4 将代码置于共享类库

export JDK=/System/Library/Frameworks/JavaVM.framework/Versions/A
gcc -dynamiclib \
	-I $JDK/Headers \
	-shared \
	-o libHelloNative.jnilib \
	HelloNative.c

5 在 Java 程序中加载该类库

class HelloNativeTest{
    public static void main(String[] args){
        HelloNative.greeting();
    }

    static{
        System.loadLibrary("HelloNative");
    }
}

6 运行

javac HelloNative.java
javac HelloNativeTest.java
java -Djava.library.path=. HelloNativeTest