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小时内与您取得联系。