如果你對程式的性能要求比較高,或者覺得java的運作速度已經滿足不了你,底層也可以采用C++來完成,使用JNI技術直接調用,會讓你的程式有飛一般的感覺。前段時間做了調研,踩了幾個坑,這裡總結下,希望大家少走彎路。
本文分别在windows環境和linux環境下介紹如何實作該技術。
使用工具:
1.JAVA使用的IDE為eclipse
2.windows環境下C++使用的IDE為visual studio 2010
3.linux環境下C++使用的編譯器為gcc/g++
eclipse建立工程名為"jniDemo"的java工程,在包名為com.woniu.Native下建立"NativeCpp.java"類,如下:
編譯生成.class檔案
進入工程下的target\classes目錄下,執行"javah -jni com.woniu.Native.NativeCpp",運作結果如下:
此時,會在classes目錄下生成"com_woniu_Native_NativeCpp.h"頭檔案,頭檔案内容如下:
vs2010建立工程名為"JniDll"的win32控制台應用程式,win32應用程式向導界面選擇 "DLL"
建立完成後,把2.1中生成的"com_woniu_Native_NativeCpp.h"頭檔案放入該工程,并把頭檔案中的#include <jni.h>改為 "jni.h",
把JDK下include檔案夾下的"jni.h"和include下win32檔案夾下的"jni_md.h"頭檔案也一同放入建立的工程中。
工程目錄如下:
編輯JniDll.cpp源碼檔案,實作頭檔案中的函數,如下:
我本機是64位系統,使用的是64位JDK,這裡生成的動态庫也要生成64位的庫,否則調用的時候報如下錯誤:
編譯生成解決方案,這時候會在工程根目錄下,生成"x64檔案夾",Debug檔案夾下會有動态庫"JniDll.dll"
運作結果如下:
a.安裝gcc和g++
yum install gcc-c++
b.安裝jdk
去官網上下載下傳jdk安裝包,建議使用rpm安裝包,會自動配置環境變量。安裝完後如下:
本機的安裝目錄為:/usr/java/jdk1.8.0_144/,不同版本可能不同。
這裡一定要注意不能安裝openjdk,因為openjdk沒有include目錄,編譯時需要用到include目錄的頭檔案。
a.建立檔案夾"jniso",mkdir jniso。
b.把2.1中生成的頭檔案"com_woniu_Native_NativeCpp.h"拷貝過來,#include "jni.h"改為#include <jni.h>
c.建立jni.cpp源檔案,添加如下代碼:
d.編譯,生成動态庫
g++ -fPIC -c jni.cpp -I /usr/java/jdk1.8.0_144/include/ -I /usr/java/jdk1.8.0_144/include/linux/
g++ -shared jni.o -o jni.so
原文出處:Java架構師之路
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。