前段时间探究了点关于JNI技术方面的东西,在网上找,发现关于这方面的东西很少
基本上也是找不到,所以就决定写下来,做个笔记:
JNI:
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,
但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的
但在下面这几种情况下你可能会用到JNI技术:
1.你的Java代码,需要得到一个文件的属性。但是你找遍了JDK帮助文档也找不到相关的API。
2.在本地还有一个别的系统,不过他不是Java语言实现的,这个时候你的老板要求你把两套系统整合到一起。
3.你的Java代码中需要用到某种算法,不过算法是用C实现并封装在动态链接库文件(DLL)当中的。
对于上述的三种情况,如果没有JNI的话,那就会变得异常棘手了。就算找到解决方案了,也是费时费力。其实说到底还是会增加开发和维护的成本。
对于JNI来说:其具体步骤如下:
1.先对Java文件对应编译 javac filename.java
filename.java文件内容eg.
class HelloWorld { private native void print(); static { System.loadLibrary("HelloWorld"); } public static void main(String[] args) { new HelloWorld().print(); } }
2.生成对应的.h文件 javah -jni filename此命令执行完后在目录中会生成HelloWorld.h文件,该文件中国包含了一个函数java_HelloWorld_print的声明。
3.将对应的.c或.cpp文件制作成动态库
cc -I/usr/lib/jvm/java-6-sun/include/linux -I/usr/lib/jvm/java-6-sun/include -fPIC -shared -o libHelloWorld.so HelloWorld.c
4.执行
java -Djava.library.path='.' HelloWorld
本文出自 “驿落黄昏” 博客,请务必保留此出处http://yiluohuanghun.blog.51cto.com/3407300/860269
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 文件
, so jni
, jni
, jni error
, helloworld
, jni封装
, 代码
, java jni tuxedo
, jni代码调试
, cc++javac#
JNI原理详解
jnienv详解、jni详解、android中jni编程详解、android jni 详解、安卓jni详解,以便于您获取更多的相关知识。