您的位置:首页 > 其它

[JNI]学习笔记系列:一

2013-03-02 05:55 323 查看
最近公司需要我接手JNI的工作,因此学习JNI,网上搜了好多,中文基本都是很入门很初级的资料。只有E文的资料比较具体全面。故此本人觉得有必要记笔记,然后跟大家分享。

首先从基础开始。 如果网上很容易搜到的细节的东西,我不会说那么细致,因为我懂了,而且网上可以搜到。

一 开发流程介绍:

1 编写 xxx.java  类 源文件:代码中有package的时候要小心,会导致javah生成不了的许多问题,下面详细说

  1)  xxx.java 的class 中包括 static { System.loadLibrary("Hello")} //Hello 为库名称

  

  2) 在xxx.java中声明c实现的本地库中的函数 public native type_name function_name();

  

2 编译javac xxx.java 成 xxx.class:

  

  这个基本类似java,简单

  

3 生成头文件 com_cdjlove_xxx.h :javah -jni com.cdjlove.xxx 

      

  1) 生成.h 头文件的时候会碰到很多问题,主要是由package引起的,如果package有,则xxx.class必须在package指定的路径下

    然后javah 后面类型是包括package路径的。并且运行javah命令所在目录是在package指定路径外,不在其内

  

  2) 还一种情况就是由于 classpath不对引起的,可以 -classpath=. 参数指定

4 根据com_cdjlove_xxx.h 编写c的库源代码,实现com_cdjlove_xxx.h中的头文件

5 编译.c文件为库文件

 cc -fPIC -I /usr/lib/jvm/sun-jdk-1.6/include/ -I /usr/lib/jvm/sun-jdk-1.6/include/linux/ -c HelloWorld.c 

 ld -shared  -o libHello.so -lc HelloWorld.o

7 运行java -Djava.library.path=. com.cdjlove.HelloWorld

[补充]加个图 来自《The Java™ Native Interface Programmer’s Guide and Specification》


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JNI 流程 步骤