最新要闻
- 数码宝贝重启_数码宝贝dw6 0
- 全球通讯!苹果极力宣传的Apple Watch车祸检测功能频繁闹乌龙!让人头大
- 国外一飞机尴尬着陆:画面犹如“狗啃泥”
- 下月开始:Win11要强制更新了
- 古筝来历小故事_古筝来历
- 每日焦点!郑少秋女儿辛酸成长史:8个月父亲出轨8岁患上三高,半生缺爱
- 【天天报资讯】有人坐吗?高级动卧票价一站8分钟420元 跟二等座差价70倍:12306回应
- 焦点消息!4520元贵妇级护肤品复刻版卖47元:相似度能达到99.99%
- 【前沿】尺寸接近米13!大厂新机渲染图出炉 白色打几分?|全球关注
- 最便宜4系来了!宝马发布i4 eDriver35四门纯电轿跑:大降4万
- 今日视点:胃癌几乎都是吃出来的:钟爱烧烤、熏制食物的朋友要注意
- 女孩用“免作业券”不写暑假作业 网友点赞:凭实力不写-要闻速递
- 每日聚焦:三星Galaxy S23 FE外观曝光:后置长焦三摄、边角圆润
- 差评第一!景区摆渡车不能兜来绕去只为钱
- 我莫得感情也莫得耳朵_我莫得感情哪里的梗
- 续航38小时/能水洗!万魔S50运动蓝牙耳机图赏
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
环球快看:在Linux下如何使用JNI
本文简要介绍了 JNI 调用规范,及常用函数。我会通过具体示例程序展示了实现一个本地调用的基本步骤。希望对大家有帮助哈。 |
大家都知道Java是跨平台的,可以说Java的出现带给我们巨大的方便。设想如果我们的应用中需要访问到特定的设备,甚至是仅符合公司内部信息交互规范的设备,或某个特定的操作系统才有的特性,用Java来做显然是十分不方便的,面对这些问题,Sun公司在 JDK1.0 中就定义了 JNI 规范,它规定了 Java 应用程序对本地方法的调用规则。
(资料图)
我将详细说明在Linux平台下如何实现本地共享库与 Java 协同工作,老规矩以Hello world为例。
定义一个 Java 类 -- Hello类public class Hello { static { try { // 此处即为本地方法所在链接库名 System.loadLibrary("hello"); } catch(UnsatisfiedLinkError e) { System.err.println( "Cannot load hello library:\n " + e.toString() ); } } public Hello() { } // 声明的本地方法 public native void SayHello(String strName); }
这里有两个注意事项:
首先:为要使用的每个本地方法编写本地方法声明,只是必须指定 native 关键字,如下所示:
public native void SayHello(String strName);
其次:必须显式地加载本地代码库。我们需在类的静态块中加载这个库(静态库在类加载时候就会调用)
现在我们来编辑hello.java以生成hello.class文件。
生成本地链接库要为以上定义的类生成 Java 本地接口头文件,需使用 javah,Java 编译器的 javah 功能将根据 Hello 类生成必要的声明,此命令将生成 Hello.h 文件
生成的 Hello.h 文件 内容如下所示:
#include /* Header for class Hello */ #ifndef _Included_Hello #define _Included_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: Hello * Method: SayHello * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_Hello_SayHello (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif在与 Hello.h 相同的路径下创建一个 CPP 文件 Hello.cpp
内容如下:
#include "Hello.h" #include // 与 Hello.h 中函数声明相同 JNIEXPORT void JNICALL Java_Hello_SayHello (JNIEnv * env, jobject arg, jstring instring) { // 从 instring 字符串取得指向字符串 UTF 编码的指针 const jbyte *str = (const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE ); printf("Hello,%s\n",str); // 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。 env->ReleaseStringUTFChars( instring, (const char *)str ); return; }
这里有三个参数,下面讲一下参数用法:
(1)所有的 JNI 调用都使用了 JNIEnv * 类型的指针,习惯上在 CPP 文件中将这个变量定义为 evn,它是任意一个本地方法的第一个参数。env 指针指向一个函数指针表,在 VC 中可以直接用"->"操作符访问其中的函数。(2)jobject 指向在此 Java 代码中实例化的 Java 对象 LocalFunction 的一个句柄,相当于 this 指针。(3)第三个参数就是本地调用中有 Java 程序传进的参数,本例中只有一个 String 型参数。 对于字符串型参数,因为在本地代码中不能直接读取 Java 字符串,而必须将其转换为 C /C++ 字符串或 Unicode。
编译生成共享库。使用 GCC 时 , 必须通知编译器在何处查找此 Java 本地方法的支持文件,并且显式通知编译器生成位置无关的代码,在我的环境中按如下过程编译:
gcc -I/home/jbuilder/jdk1.3.1/include -I/home/jbuilder/jdk1.3.1/include/linux -fPIC -c Hello.c
生成 Hello.o
gcc -shared -Wl,-soname,libhello.so -o libhello.so Hello.o
生成 libhello.so(这就是linux下动态链接库的文件名格式,就像windows下是.dll文件后缀名类似)
最后通知动态链接程序此共享文件的路径。
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH编写一个简单的 Java 程序来测试我们的本地方法
将如下源码存为 A.java:
import Hello; import java.util.*; public class A { public static void main(String argv[]) { A a = new A(); } public A() { Hello h = new Hello(); // 调用本地方法 h.SayHello("Hello world"); } }
用 javac 编译A.java,生成A.class向执行普通 Java 程序一样使用 java A,我们会看到在屏幕上出现 Hello world。ok,完成!
本文原创地址:https://www.linuxprobe.com/linux-jni.html作者:王毅,审核员:逄增宝
本文原创地址:https://www.linuxprobe.com/linux-jni.html
关键词:
环球快看:在Linux下如何使用JNI
焦点热门:python: BytesIO 中 read 用法
数码宝贝重启_数码宝贝dw6 0
全球通讯!苹果极力宣传的Apple Watch车祸检测功能频繁闹乌龙!让人头大
国外一飞机尴尬着陆:画面犹如“狗啃泥”
下月开始:Win11要强制更新了
古筝来历小故事_古筝来历
部署zabbix5.0以及使用 全球微头条
天天微速讯:Python教程(1)——python环境的下载与安装
每日焦点!郑少秋女儿辛酸成长史:8个月父亲出轨8岁患上三高,半生缺爱
【天天报资讯】有人坐吗?高级动卧票价一站8分钟420元 跟二等座差价70倍:12306回应
焦点消息!4520元贵妇级护肤品复刻版卖47元:相似度能达到99.99%
nethttp和gin 路由
文心一言 VS 讯飞星火 VS chatgpt (50)-- 算法导论6.2 2题-简讯
Golang 简单的数据对齐可提高程序速度和内存使用率_环球新消息
【前沿】尺寸接近米13!大厂新机渲染图出炉 白色打几分?|全球关注
最便宜4系来了!宝马发布i4 eDriver35四门纯电轿跑:大降4万
今日视点:胃癌几乎都是吃出来的:钟爱烧烤、熏制食物的朋友要注意
女孩用“免作业券”不写暑假作业 网友点赞:凭实力不写-要闻速递
每日聚焦:三星Galaxy S23 FE外观曝光:后置长焦三摄、边角圆润
差评第一!景区摆渡车不能兜来绕去只为钱
【Java】使用 fasterxml.jackson 进行反序列化以及部分注意事项
微动态丨可观测性是什么? 入门指南
WPF MVVM之点滴分享
Donaukit用户创建
【财经分析】东北地区国资国企改革深化推进 或迎来哪些针对性政策?
我莫得感情也莫得耳朵_我莫得感情哪里的梗
续航38小时/能水洗!万魔S50运动蓝牙耳机图赏
爸爸给女儿买RTX 4060 Ti显卡当生日礼物 小女孩表情亮了
来试试手气?《逆水寒》手游6月30日上线:官方宣布抽奖送鹤岗一套房-环球速读
每日消息!比电脑还大:24GB+1TB!今年最能打的直屏旗舰杀疯了
迅雷云盘TV版最高可领180天超级会员特权 支持4K电视超清播放-天天信息
天天微资讯!广州杨大爷退休后,喝酒不喝茅五剑,青睐三款廉价酒
强化学习从基础到进阶-常见问题和面试必知必答[8]:近端策略优化(proximal policy optimization,PPO)算法
债市日报:6月28日|全球新视野
债市日报:6月28日
农村三胞胎姐妹均高分超一本线:成绩一直很优秀
极氪001欧洲价格公布:起售价47万元 比国内贵17万
高管曾言等本土车企“烧死了”再来抢市场!起亚EV6开启盲订 每日速递
今天起 韩国人集体“年轻一两岁”:与一项法案有关
XREAL Beam投屏盒子首次亮相MWC!AR空间屏体验太酷了
一般小县城稀缺行业有哪些 今日热搜
跑得更快!华为云GaussDB以出色的性能守护“ERP的心脏”
记录--不定高度展开收起动画 css/js 实现
今日播报!Cognos教程_编程入门自学教程_菜鸟教程-免费教程分享
LRU 缓存淘汰算法
Mac反编译安卓APK
世界看点:原来是他们!退市股获举牌4个交易日翻倍,步步高系大佬要进董事会
【金融街发布】财政部:5月地方债发行规模为7554亿元 新增债券占比近四成_即时看
天天即时看!注意!天孚通信:股东朱国栋计划减持公司股份不超过约395万股
游戏主播被大额打赏后剃光头!结果被坑惨:打赏退款了
尽享丝滑!MWC现场体验领克08魅族Flyme Auto车机:流畅度爆表 环球新要闻
焦点资讯:萧敬腾求婚好多地方下雨 “雨神”真有这么神?
15万的特斯拉廉价新车Model 2跳票了:延期到2025年
今日快讯:能否追上高铁?凯迪拉克CT5-V推出全新改装套件 动力可达1000匹
js的Map数据类型
Sudo堆溢出漏洞(CVE-2021-3156)复现
Spring 赌上未来一击,推出响应式框架 WebFlux,代码更优雅,性能更强! 最新
解锁高质量文档转换:通过Java应用程序免费将PDF转换为XPS
每日看点!未来可期!农村三胞胎姐妹高分同超一本线
北交所日报:指数调整回补缺口 曙光鼎智双双大涨
特斯拉Model Y的劲敌来了 溜背造型+电动尾翼 全新蔚来EC6实车曝光 报道
滚动:中国互联网协会重申:我国人工智能已进入全球第一梯队
Intel Arc显卡驱动打鸡血:游戏性能飙升最高3.13倍!
全球热点评!骁龙8 Gen2没到极限!24GB运存手机不是终点 你觉得有必要吗?
高温再度来袭!北方气温将高于南方四大火炉城市|环球即时看
ST深天: 关于落实《关于中国证监会深圳监管局行政监管措施决定书的书面整改报告》相关整改措施的公告-全球报道
php如何解决高并发|每日热门
今日讯!业务安全情报第十七期 | 国际航班上,小“票代”在疯狂倒卖高价票
在 Java、Python、JavaScript 和 Go 中拥抱异步
数据交换不失控:华为云EDS,让你的数据你做主 环球微头条
天天速递!知嘛家整屋案例 | 116㎡现代简约风,超强收纳颜值功能拉满!
【新华500】新华500指数(989001)28日探底回升微跌0.11%
当前观点:索尼推送满血包:ZV-E1相机支持4K/120p和1080P/240p
车主看后想骂人 特斯拉一充电站全被“割了”:只剩桩不见枪
天天热消息:河北邢台雷雨夜震撼闪电撕破夜空:闪电如怒吼银蛇
警惕!侧躺着玩手机可能会影响你的颜值 同时威胁健康
【世界聚看点】80%毕业生都出国了 是马斯克公司最大“生源地”?清华大学发声
腾讯在深圳宝安启用三个与AI大模型相关的平台
解决TrueNAS中Smb共享文件路径不区分大小写的问题 每日精选
GIS地形场景的应用与前景:从美景欣赏到环境保护与城市规划|焦点热门
讯息:遥望科技启动商家大会,瑜大公子现身会场分享进阶故事
焦点热文:助力首都建设 浦发银行北京分行发售北京市地方政府柜台债券
今天解禁!RTX 4060终于来了 2399元买吗?
芯片之母 是德EDA升级支持6G设计:速度快10倍|当前热门
王宝强做客东方甄选!被俞敏洪问是否还相信爱情
24GB内存时代来了!一加真我全都上24GB超大内存:性能激进 当前播报
CDPR:《赛博朋克2077》首发没那么糟糕 都怪跟风黑 全球今日讯
天天速看:全国电力行业学习宣传贯彻习近平新时代中国特色社会主义思想和党的二十大精神宣讲比赛举办
热点在线丨MongoDB(二)
奥特银河格斗:被官方遗忘的形态与奥特曼阿古茹成为了全剧最惨
当前热文:男子在动车上霸座充电被行拘 网友惊叹处罚严厉:7天还少?
华为孟晚舟:5.5G是必然之路、下行可达万兆!
世界热议:上海发布高温黄色预警,预计本市大部地区最高温将超过35度
过烂路前避震可能会断 丰田召回近60万辆汽车|当前速看
核污水强行入海无视反对!日本官方全面检查排海设备:污染倒计时
环球通讯!致6死20余伤!广州宝马撞人案司机二审结果出炉:被判死刑
天天最资讯丨大学生游戏本怎么选?RTX4060加持 华硕天选4锐龙版到手7999元
【世界独家】世界最丑狗狗比赛胜者决出:七岁中国冠毛犬夺冠
焦点快看:众智科技:6月27日融资买入551.57万元,融资融券余额4327.64万元