码迷,mamicode.com
首页 > 编程语言 > 详细

java JNI

时间:2015-01-30 20:58:48      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

 讲解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

标签:

原文地址:http://www.cnblogs.com/sunniflyer/p/4069311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!