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