Eclipse下建立简单JNI程序实现返回double类型

Posted 知乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eclipse下建立简单JNI程序实现返回double类型相关的知识,希望对你有一定的参考价值。

 

在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,javah命令也一样

首先建立两个java文件:

GetPara.java:

1 package com.niiam;
2 
3 public class GetPara {
4     public native double getparameter();
5 }

这里建立了一个类,在类中定义了一个本地实现的方法getparameter(),该方法没有传入参数,传出一个固定的double类型数据,后面将由C++语言实现

 

建立一个Test.java进行测试:

1 package com.niiam;
2 
3 public class Test {
4 public static void main(String[] args) {
5         System.loadLibrary("getpara");
6         GetPara para=new GetPara();
7         System.out.println("the height is:" + para.getparameter());
8     }
9 }

注意!!!

这里是在main方法中引入后面我们即将生成的getpara.dll链接库

也可以将该语句放在GetPara这个类里面,并用static{}进行修饰,这样,在每次实例化这个类时,都相当于实现了引入库操作。

在跟SpringBoot项目结合时要用第二种方式,切记!

 

进入com.niiam包所在的文件夹

javac com.niiam.GetPara.java

javac com.niiam.Test.java进行编译

 

javah com.niiam.GetPara.java生成.h文件com_niiam_GetPara.h

注意,这里的.h文件是包含包名的,其内部的函数声明:

JNIEXPORT jdouble JNICALL Java_com_niiam_GetPara_getparameter
  (JNIEnv *, jobject);

也是有包名存在的,与手动建立工程项目的情况不同,生成的dll文件也不同,不可等同

 

在vs中建立console项目,输出设置为dll

引入头文件,将jni.h  jni_md.h所在目录都引入包含目录

建立getpara.cpp文件

 1 #include "com_niiam_GetPara.h"
 2 
 3 
 4 
 5 JNIEXPORT jdouble JNICALL Java_com_niiam_GetPara_getparameter
 6 (JNIEnv *, jobject)
 7 {
 8     double a = 104.06;
 9     return a;
10 }

编译生成dll文件

注意由于java platform是x64的平台,因此这里生成的dll文件也必须是x64的

 

生成的dll文件放在哪里,这里有几种选择:

1、放到磁盘制定目录,将该目录添加进环境变量path中,这样,运行时即可引入。这种方式同时适合于在Eclipse中运行,以及在控制台运行java com.niiam.GetPara

2、放到项目目录中去,并将项目目录添加进java build Path中,如图:

或者是:

 

 经测试,放到这两个地方都可以

 

这样直接在Eclipse中可直接运行

 

以上是关于Eclipse下建立简单JNI程序实现返回double类型的主要内容,如果未能解决你的问题,请参考以下文章

Windows下JNI的使用教程

如何编译jni

关于JNI调用从eclipse转到Android Studio遇到的问题(总结)

如何使用 Eclipse TPTP 分析 JNI 应用程序?

一个使用 Eigen 库和 jni 的简单 ndk 项目

JNI学习笔记