【详解】JNI (Java Native Interface) (二)
案例二:传递参数给C代码,并从其获取结果
注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型。


此案例所有生成的所有文件如下:

(1)编写案例二的Java代码,如下:

这里我们定义了一个native方法,此方法用于计算两数平均值。将两个Java int类型的值传递给C代码,使其计算并返回double值。然后输出到标准IO流
注:这里加载动态链接库的方式,改为了loadLibrary,只需提供库名即可,但是接下来在运行的时候,需要指定java.library.path,使其指向库所在的目录。
(2)编译java代码,并生成头文件

javac 命令有 -h 选项,即编译并生成头文件,-h 对应的参数,是头文件生成的地址。这里"."表示,在当前目录下生成。
生成的头文件如下所示:

(3)编写源文件。

这里C获取到参数,并输出到标准IO流,然后将计算结果返回给Java。
(4)利用gcc生成动态链接库

由于Java环境变量已配置,可直接引用。生成的动态链接库名为demo.so
(5)设置java.library.path,并执行Java程序

上例,通过java命令的-D选项设定运行时库路径,但是仍然提示"找不到"demo2动态库。
经查阅,发现,在Linux系统中,共享库(也就是放入java.library.path路径下的动态库)必须符合这样的规范:
Java代码:System.loadLibrary("XXXX");
库文件名:libXXXX.so
在Linux系统下共享库必须有lib作为前缀
故修改demo2.so的文件名为libdemo2.so,并再次执行Java程序


成功传参,并返回计算结果。
- JNI (Java Native Interface)(一)
- JNI (Java Native Interface) (二)
- JNI (Java Native Interface)(三)
- JNI (Java Native Interface)(四)
【详解】JNI (Java Native Interface) (二)的更多相关文章
- 【详解】JNI (Java Native Interface) (四)
案例四:回调实例方法与静态方法 描述:此案例将通过Java调用的C语言代码回调Java方法. 要想调用实例对象的方法,需要进行以下步骤: 1. 通过对象实例,获取到对象类的引用 => GetO ...
- 【详解】JNI (Java Native Interface) (三)
案例三:C代码访问Java对象的实例变量 获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的 ...
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- Android Jni(Java Native Interface)笔记
首先记录一个问题,关于如何用javah生成头文件. 为什么要生成头文件?在含有 static{ System.loadLibrary("hellojni"); } 这样代码的类下面 ...
- JNI(java Native Interface)
参看: http://blog.csdn.net/xw13106209/article/details/6989415
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
- JNI(Java Native Interface)
一.JNI(Java Native Interface) 1.什么是JNI: JNI(Java Native Interface):java本地开发接口 ...
- 【详解】JNI(Java Native Interface)(一)
前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...
- Java Native Interface 四--JNI中引用类型
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobjec ...
随机推荐
- Alpha阶段敏捷冲刺(五)
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:实现了个人遗忘曲线图 徐璐琳:完成了微信Web ...
- 20155326 2006-2007-2 《Java程序设计》第4周学习总结
20155326 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承共同行为 (1)继承基本上就是避免多个类间重复定义共同行为,关键词为extends. ( ...
- noip第9课资料
- Codeforces821C Okabe and Boxes 2017-06-28 15:24 35人阅读 评论(0) 收藏
C. Okabe and Boxes time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- POJ3666 线性dp_离散化_贪心
POJ3666 线性dp_离散化_贪心 就DP而言这个题不算难,但是难就难在贪心,还有离散化的思想上 题目大意:n个土堆,问你最少移动多少单位的图,可以使得这n个土堆变成单调的 dp[i][j]表示前 ...
- ubuntu apache linux
在ubuntu下安装的apache, 很多配置文件都分开写了,需要了解一下各部分: http://blog.csdn.net/veizz/article/details/7410784 Ubuntu下 ...
- Maven的阿里云镜像
打开“Maven安装目录/conf/settings.xml”文件,找到<mirrors>节点,添加: <mirror> <id>nexus-aliyun</ ...
- ASP.NET SignalR Troubeshooting
method could not be resolved 场景: Javascript客户端不生成代理,调用服务端方法. 按照官网文档的用法: contosoChatHubProxy.invoke(' ...
- SoftWareHelper
SoftWareHelper 环境 Visual Studio 2017,.Net Framework 4.0 SDK GitHub源码:https://github.com/yanjinhuagoo ...
- 4.翻译:EF基础系列--EF架构
原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...