千家信息网

Java中怎么理解JNI原理

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"Java中怎么理解JNI原理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java中怎么理解JNI原理"吧!实例:环境说明:ubu
千家信息网最后更新 2025年11月09日Java中怎么理解JNI原理

这篇文章主要讲解了"Java中怎么理解JNI原理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java中怎么理解JNI原理"吧!

实例:

环境说明: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

注:1)、此头文件是不需要用户编译的,直接供其

/* 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

它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原理"的内容了,经过本文的学习后,相信大家对Java中怎么理解JNI原理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 程序 生成 原理 动态 命令 目录 函数 方法 清单 C++ 学习 编译 一致 内容 链接 成功 名字 实例 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 众核片上网络技术 软件开发中心不符合项 河北服务器风扇诚信推荐 一图看懂我国未成年人的网络安全 数据库的主要目的 camera模组软件开发 服务器主机自动开机 软件开发你用资源 好家长杂志被收录的数据库 万茜去哪个服务器了 计算机网络安全自考pdf 软件开发都是用什么语言 计算机网络技术学些什么东西 中国最厉害的网络安全系统 数字贸易壁垒限制指数数据库 拉卡拉刷卡机连不到服务器怎么刷 微软非关系型数据库 互联网大会2021 宝通科技 添加好友修改昵称数据库设计 做游戏软件开发的男生性格 网络安全和防电信诈骗专题宣讲 网络安全隐患有哪表现形式 求生之路怎么退掉服务器 小学生网络安全知识教育心得 多维度挑战网络安全 我的世界 建立服务器 网络安全变成机器人格斗 软件开发服务化方法 网络安全工程师专业的大学 网络安全面试个人自述材料
0