先创建一个Java Project ,然后创建一个类HelloWorld
public class HelloWorld {
public native void sayHello();
static {
System.loadLibrary("HelloWorld");
}
public static void main(String[] args){
(new HelloWorld()).sayHello();
}
}
javac HelloWorld.java 生成.class文件
javah -jni HelloWorld 生成HelloWorld.h内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
在同一目录下建HelloWorld.c文件,内容如下:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *env, jobject obj){
printf("HelloWorld!!!");
}
注意修改一下函数的参数列表
下面生成.so文件
gcc -fPIC -shared -I /usr/lib/jvm/jdk8/include -I /usr/lib/jvm/jdk8/include/linux -o libHelloWorld.so HelloWorld.c
其中-I后面跟的是jni.h和jni_md.h文件的路径 不加的话会报错,表示没有找到jni.h和jni_md.h
生成.so之后 执行java HelloWorld
可能会报错,so文件不在library路径下
这时候设置一下LD_LIBRARY_PATH 命令 export LD_LIBRARY_PATH=/home/hana/lib (这个路径可以根据自己需要设置,或者自己创建这样一个文件夹,专门放置so文件)
把so文件拷贝进去
再执行java HelloWorld
就OK了