千家信息网

JAVA开发中JNI标准原理是什么

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要介绍"JAVA开发中JNI标准原理是什么",在日常操作中,相信很多人在JAVA开发中JNI标准原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JAV
千家信息网最后更新 2024年12月13日JAVA开发中JNI标准原理是什么

这篇文章主要介绍"JAVA开发中JNI标准原理是什么",在日常操作中,相信很多人在JAVA开发中JNI标准原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JAVA开发中JNI标准原理是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

JNIJava Native Interface的缩写,中文为JAVA本地调用。

JNIJAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。

实例:

环境说明:ubuntu 10.4.2 LTS系统

程序清单1:src/com/magc/jni/HelloWorld.java

/**   *   */   package com.magc.jni;   /**   * @author magc   *   */ public class HelloWorld {  static {  System.loadLibrary("Hello");  }  public native void DisplayHello();  /**  * @param args  */ public static void main(String[] args) {  new HelloWorld().DisplayHello();  }  }

进入src目录下,编译该JAVA类,

命令:javac ./com/magc/jni/HelloWorld.java

在该HelloWorld.java所在目录下生成HelloWorld.class

然后使用javah生成头文件,

命令:javah -jni com.magc.jni.HelloWorld

在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数

程序清单2:com_magc_jni_HelloWorld.h

/* DO NOT EDIT THIS FILE - it is machine generated */ #include    /* Header for class com_magc_jni_HelloWorld */   #ifndef _Included_com_magc_jni_HelloWorld   #define _Included_com_magc_jni_HelloWorld   #ifdef __cplusplus   extern "C" {   #endif  /*  * Class: com_magc_jni_HelloWorld  * Method: DisplayHello  * Signature: ()V  */ JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello  (JNIEnv *, jobject);  #ifdef __cplusplus  }  #endif  #endif

注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。

2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。

程序清单3:src/jni_helloworldImpl.cpp

#include  #include "com_magc_jni_HelloWorld.h" #include   JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello  (JNIEnv *env, jobject obj)  {   printf("From jni_helloworldImpl.cpp :");   printf("Hello world ! \n");   return;  }

此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。

编译生成动态库libHello.so,

命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so

成功后,便会在当前目录下生成动态链接库libHello.so文件。

有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,

命令:java -Djava.library.path=. com.magc.jni.HelloWorld

输入结果即为:From jni_helloworldImpl.cpp :Hello world !

到此,关于"JAVA开发中JNI标准原理是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

文件 程序 标准 动态 生成 原理 开发 命令 方法 目录 C++ 学习 函数 清单 编译 一致 平台 更多 语言 链接 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 sql导入表格报错数据库 苏州网络软件开发供应商 山东淄博网络安全 全球十大互联网科技企业 河北语音网络技术服务产品介绍 软件开发实习日记六十篇 网上报告厅属于多媒体型数据库吗 软件开发收获内容 数据库设计是从用户 济南市戴尔服务器山东总代 杭州世佳网络技术怎么样 淮安移动网络安全吗 成都数字化博物馆软件开发 海南常规软件开发定制费用是多少 服务器多个显卡运行程序 正规的浪潮服务器代理商联系方式 江宁区国际软件开发专业服务 数据库在线链接 数据库收银系统登录表 电脑软件开发哪个工资高 网络安全视频名称 上理科技园杯中国互联网大学 拉格朗日 服务器已满 里乐网络技术有限公司 ping游戏服务器 软件开发票数统计 公安机关网络安全检查总结 网络安全竞赛试题及答案解析 网络安全法如何规定等保测评 数字化网络安全龙头股
0