全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JAVA JNI原理详细介绍及简单实例代码

JAVA JNI原理

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

有了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

/* DO NOT EDIT THIS FILE - it is machine generated */
 #include <jni.h>
  /* 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 <jni.h>
#include "com_magc_jni_HelloWorld.h"
#include <stdio.h>
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原理  # JNI原理详解  # JNI  # Java通过JNI 调用动态链接库DLL操作  # java通过jni调用opencv处理图像的方法  # Java通过调用C/C++实现的DLL动态库——JNI的方法  # JNI实现最简单的JAVA调用C/C++代码  # JAVA JNI函数的注册过程详细介绍  # Java的JNI快速入门教程(推荐)  # 从源码编译Android系统的Java类库和JNI动态库的方法  # 解析Java的JNI编程中的对象引用与内存泄漏问题  # java jni调用c函数实例分享(java调用c函数)  # 详解JNI到底是什么  # 头文件  # 目录下  # 动态链接库  # 这一  # 在此  # 不需要  # 也能  # 希望能  # 便会  # 一个重要  # 谢谢大家  # 即为  # 就可以  # 实现了  # 将来  # 总结了  # 弥补了  # args  # param  # void 


相关文章: 如何零成本快速生成个人自助网站?  威客平台建站流程解析:高效搭建教程与设计优化方案  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  内网网站制作软件,内网的网站如何发布到外网?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  存储型VPS适合搭建中小型网站吗?  广州营销型建站服务商推荐:技术优势与SEO优化解析  Swift中循环语句中的转移语句 break 和 continue  学校免费自助建站系统:智能生成+拖拽设计+多端适配  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  免费视频制作网站,更新又快又好的免费电影网站?  如何在阿里云完成域名注册与建站?  建站三合一如何选?哪家性价比更高?  常州自助建站费用包含哪些项目?  如何在腾讯云服务器上快速搭建个人网站?  如何做网站制作流程,*游戏网站怎么搭建?  html制作网站的步骤有哪些,iapp如何添加网页?  名字制作网站免费,所有小说网站的名字?  智能起名网站制作软件有哪些,制作logo的软件?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  网站制作软件有哪些,制图软件有哪些?  网站制作网站,深圳做网站哪家比较好?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何通过商城免费建站系统源码自定义网站主题?  网站制作服务平台,有什么网站可以发布本地服务信息?  网站app免费制作软件,能免费看各大网站视频的手机app?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何获取PHP WAP自助建站系统源码?  建站之星如何保障用户数据免受黑客入侵?  无锡营销型网站制作公司,无锡网选车牌流程?  创业网站制作流程,创业网站可靠吗?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  大连网站制作公司哪家好一点,大连买房网站哪个好?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何通过主机屋免费建站教程十分钟搭建网站?  C#怎么创建控制台应用 C# Console App项目创建方法  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何在宝塔面板创建新站点?  网页设计与网站制作内容,怎样注册网站?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  Swift中swift中的switch 语句  建站为何优先选择香港服务器?  如何快速使用云服务器搭建个人网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  javascript中对象的定义、使用以及对象和原型链操作小结  网站设计制作企业有哪些,抖音官网主页怎么设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。