package top.huzhurong.test;public class HelloWorld {//申明一个native方法public native void sayHelloWorld();//装入动态链接库,"HelloWorld"是装入动态链接库的名称//在我的mac机器上,这里会去Extensions里边找 lib动态库名字.jnilib..==> libHelloWorld.jnilibstatic {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 __cplusplusextern "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
darwinMacOSX
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:.
运行输出

