package top.huzhurong.test;
public class HelloWorld {
//申明一个native方法
public native void sayHelloWorld();
//装入动态链接库,"HelloWorld"是装入动态链接库的名称
//在我的mac机器上,这里会去Extensions里边找 lib动态库名字.jnilib..==> libHelloWorld.jnilib
static {
System.loadLibrary("HelloWorld");
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHelloWorld();
}
}
- javac 编译成class文件
- javah 生成
.h
文件(c++) 其效果和Java中的接口类试 - 实现javah生成的.h文件, 实现文件
xx.cpp
- 生成动态链接库.
javah 生成的 .h
文件javah -jni top.huzhurong.test.HelloWorld
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class top_huzhurong_test_HelloWorld */
#ifndef _Included_top_huzhurong_test_HelloWorld
#define _Included_top_huzhurong_test_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: top_huzhurong_test_HelloWorld
* Method: sayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_top_huzhurong_test_HelloWorld_sayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
cpp实现文件
#include "jni.h"
#include "top_huzhurong_test_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_top_huzhurong_test_HelloWorld_sayHelloWorld(JNIEnv *env,jobject obj){
printf("Hello World!\n");
return;
}
gcc编译生成动态链接库
gcc -shared -fPIC -I $JAVA_HOME/include -I $JAVA_HOME/include/darwin/ HelloWorld.cpp -o libHelloWorld.jnilib
darwin
MacOSX
cp 移动生成的 libHelloWorld.jnilibj
到 /Library/Java/Extensions
在我的机器上
System.getProperty("java.library.path")
输出
/Users/admin/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
运行输出