【详解】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 ...
随机推荐
- 从kepware定时取web api内容
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Java包、权限访问修饰符、封装性
包 概念: 物理上是文件夹:逻辑上是有逻辑关系的类的集合 作用: 避免类重名:控制访问权限 命名规范: 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,如com,o ...
- Foundation-NSOperation-NSInvocationOperation/NSBlockOperation/NSOperationQueue
iOS多线程编程技术之NSThread.Cocoa NSOperation.GCD 线程之间的通信 iOS开发系列--并行开发其实很容易 GCD由浅入深学习 iOS多线程NSOperation/Que ...
- Foundation-NSRunLoop
Objective-C之run loop详解 Objective-C之run loop详解 RunLoop 详解
- jvm调优的分类
本文部分内容出自https://blog.csdn.net/yang_net/article/details/5830820 调优步骤: 衡量系统现状. 设定调优目标. 寻找性能瓶颈. 性能调优. 衡 ...
- bootstrap手风琴折叠
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- bootstrap2.2相关文档
本节课我们主要学习一下 Bootstrap表单和图片功能,通过内置的 CSS定义,显示各种丰富的效果. 一.表单 Bootstrap提供了一些丰富的表单样式供开发者使用. 1.基本格式 //实现基本的 ...
- SRM469
250pt 在一个10^9 * 10^9大的剧院里,有最多47个位子有人,然后有一对couple想找一对左右相邻的位子,问有多少种选择方式. 思路: 总共有 n * (m-1)种方案,然后扣掉有人位置 ...
- php file_get_contents fopen 连接远程文件
使用file_get_contents和fopen必须空间开启allow_url_fopen. 方法: 编辑php.ini,设置allow_url_fopen =true On,allow_url_f ...
- EFCore2.1中DbFirst和CodeFirst简单使用
EFCore中没有DbFirst了吧,应该都是Code First 先说说第一种,Code First From Database(DbFirst)数据库先行,这种方式就要命令行了...(特不喜欢命令 ...