首页 > 代码库 > java JNI

java JNI

 讲解java虚拟机以及堆和栈的:http://blog.csdn.net/cutesource/article/details/8244250

 

编辑helloJNI.java

class helloJNI {        public native int  get();        public native void set(byte c);        static {            //System.out.println(System.getProperty("java.library.path"));            System.load("/usr/lib/helloJNI.so");            //System.out.println("loading ok");        }               public static void main(String[] args) {            System.out.println("ing main 1");            helloJNI test = new helloJNI();            System.out.println("ing main ");            byte c  = (byte)0xff;            test.set(c);            System.out.println("ing main 3");            System.out.println("test:"  +  String.valueOf(test.get()));        }}

javac helloJNI.java

生成头文件:javah -jni helloJNI

编辑helloJNI.cpp

#include "helloJNI.h"int ret=0;JNIEXPORT jint JNICALL Java_helloJNI_get  (JNIEnv *env, jobject jo){    return ret;}JNIEXPORT void JNICALL Java_helloJNI_set  (JNIEnv *env, jobject jo, jbyte c){    unsigned char cc = c;    ret = cc;}

编译:

gcc -I/usr/local/lib/jdk1.7.0_71/include/linux -I/usr/local/lib/jdk1.7.0_71/include -fPIC -shared -o helloJNI.so helloJNI.c

将 helloJNI.so 复制到/usr/lib中:

sudo cp -v helloJNI.so /usr/lib/

 

 

 

这里执行javah命令时与class文件在同一目录下。而如果class文件放入了包中

如:

package com.test.demo;

class TestHello{

...

}

 

需要建立相应的目录com/test/demo/TestHello.class

然后退出到com目录的上层目录进行:javah -jni com.test.demo.TestHello

就能够正确的生成TestHello.class的头文件了,(头文件位于当前目录下)。

jar -cvf TestHello.jar com/test/demo/TetsHello.class

 

 

 

------

http://blog.csdn.net/liu251/article/details/3953906

java JNI