Java调用本地方法简单测试
系统环境:Linux CentOs5
Java平台:JDK1.6.0_27
本地方法:使用C语言,gcc编辑器
这里只是一个简单的描述,其目的只是为了调用本地方法这个过程的跑通,所以一切从简!
过程步骤:
1.编写Java类文件,包含本地方法声明以及调用本地方法的main方法。
2.使用javac 编译Java类文件,与正常编译方式一样。
3.使用javah -jni来根据编译后的class文件生成本地方法声明的.h头文件。
4.编写本地方法的实现C文件,其中包含第三步中生成的.h头文件。
5.gcc -c 编译C语言文件。
6.gcc -shared -o libNativeFile.so NativeFile.o,根据第五步编译生成的o文件来生成库文件即so文件,该文件名前面要多添加一个lib。
具体操作步骤如下:
编写TestNative.java如下:
这里面包含着一个方法的声明,但是已经与我们开始在java文件里面的声明完全不同。
下一步我们新建一个NativeMethod.c文件,其内容如下:
。
然后: gcc -c NativeMethod.c
得到一个o文件
然后: gcc -shared -o libNativeMethod.so NativeMethod.o
就能够得到一个以so结尾的库文件。
然后就是最后一步了,设置路径,方式应该有不少种方法。
1.可以在/etc/bashrc里面添加如下(未试过):
export LD_LIBRARY_PATH=/home/chengshu/java
2.在/etc/profile文件中添加(也未试过,本人比较懒!)
LD_LIBRARY_PATH=/home/chengshu/java
3.直接在linux控制台执行(我喜欢!):export LD_LIBRARY_PATH=/home/chengshu/java
4.在执行最后的class文件的时候指定,即:
java -Djava.library.path=. TestNative
解释一下,这个/home/chengshu/java路径即我们的so文件所在的路径,我一直在该目录下工作,所以在上面的第四种方法的时候直接指定为"."即是当前目录,so文件即在下面。
一切都大功告成了,执行程序!!!
执行命令可以参看:java TestNative
或者: java -Djava.library.path=. TestNative
即可得到输出:zhangsan hello
添加:有时候java程序需要使用一些jar包,则需要在mf文件里面配置:
Class-Path: jar/jpcap.jar 注意:":"之后必须有一个空格,后面路径是相对于执行jar包而言的。搞错了,这是对上一篇文章的补充!