[JNI]学习笔记系列:一


最近公司需要我接手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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值