之前做过一个项目有用到过JNI,最初也是各种不懂,经过自己的不断摸索,开始有了眉目,知道的了怎么使用。我是有在Linux和windows平台都用了JNI,在这里简单分享以下在Linxu平台上开发用了JNI的简单步骤和小demo。楼主亲测可用,要是有不对的地方,欢迎指正! 之前写了一遍windows平台上一个demo
Linux 平台上的项目使用jni called so library
1. 在eclipse中新建一个项目 JAVA Project 或者Web Project都可以,在src下在com.hailee.util 包中新建一个Hello.java类
package com.hailee.util;
public class Hello{
public native static int add(int x,int y);
static {
System.load("/home/hailee/main.so"); //以绝对路径加载so文件
}
public static void main(String[] args){
System.out.println(add(1,1));
}
}
2. 在Linux的terminal上/home/hailee/下新建一个Hello.java类 内容如上一致。
3. 在Hello.java路径下编译java代码 也就是/home/hailee下面
javac -d . Hello.java
Ø 命令解释:-d:表示生成目录,生成的目录以package的定义为准;
.:表示在当前所在文件夹中生成
4. 查看生成的文件和目录
ls –al
Ø 此时会生成com.hailee.util的目录
5. 生成.h头文件
在/home/hailee路径下生成.h文件
javah com.hailee.util.Hello
6. 编写实现add 方法的C代码
vim hello.c
代码如下:
#include<stdio.h>
#include "sf_gg_Hello.h"
JNIEXPORT jint JNICALLJava_sf_gg_Hello_add(JNIEnv *env, jclass jc, jint x, jint y){
return x+y; //简单的加法
}
7. 编译成so文件
在/home/hailee的路劲下编写Makefile文件,内容如下
CC= gcc
SHARED=-shared
SOURCE= Hello.c
LIBS= -I/usr/java/jdk1.7.0_79/include -I/usr/java/jdk1.7.0_79/include/linux
SONAME=main.so
default:
$(CC) -fPIC $(LIBS) -o $(SONAME) $(SHARED) $(SOURCE)
8. 运行so文件
java sf.gg.Hello