1. 程式人生 > >Eclipse下建立簡單JNI程序實現返回double類型

Eclipse下建立簡單JNI程序實現返回double類型

package 技術分享 png 環境變量path post 磁盤 jni 函數 height

在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類型