http://blog.csdn.net/pennyliang/article/details/6794303
为了给THUIRDB做个java调用接口,学习了下JNI。从网上找了个例子【http://w393185765.blog.163.com/blog/static/5672230620112254213718/】,并做了些修改,详细如下:
1)
编写如下代码,并存为JniDemo.java
public class JniDemo{static { System.loadLibrary("Demo");}public static native void print();public static native int add(int a,int b);public static void main(String[] args){ System.out.println(add(4,5));}}
2)执行:javac JniDemo.java
该命令得到JniDemo.class
3)执行:javah JniDemo
该命令得到JniDemo.h
4)编写下面代码,并存为JniDemo.c
#include<stdio.h>#include <jni.h>#include "JniDemo.h"JNIEXPORT void JNICALL Java_JniDemo_print(JNIEnv *env, jobject obj){ printf("hello jni kkkkkkkkkkkkkkkkllllllllllllllllllll\n");}JNIEXPORT jint JNICALL Java_JniDemo_add(JNIEnv *env, jobject obj, jint a, jint b){ return a+b;}
5)编写下面文件,并存为Makefile (path根据不同机器上的安装情况需要调整)
LD:=ldCPP:=gccCPPFLAGS:= -c -fPIC# the libfile name is libDemo.soLIB:=libDemo.so#the jni.h pathpathlix:=-I/usr/java/jdk1.6.0_16/include/pathinclude:=-I/usr/java/jdk1.6.0_16/include/linuxobjects:=JniDemo.oedit:$(objects) $(LD) -shared -o $(LIB) $(objects)JniDemo.o:JniDemo.c JniDemo.h $(CPP) $(pathlix) $(pathinclude) $(CPPFLAGS) JniDemo.cclean: rm -f $(objects)
6)执行:make
得到libDemo.so
7)运行如下命令,完成实验
java -Djava.library.path=./ JniDemo
生命不是一场赛跑,而是一次旅行。比赛在乎终点,而旅行在乎沿途风景。