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

posted @ 2015-01-30 20:36  sunnycs  阅读(165)  评论(0编辑  收藏  举报