Java 程序可以“一次編寫,到處運行”,原因是它運行在 Ja va 虛擬機上。
正是由于這個原因,它的執(zhí)行效率也會相應(yīng)打些折扣,特別是一些與操作系統(tǒng)連接比較緊密的操作。
所以 Java 也提供了本地接口,以便直接調(diào)用其它更高效的程序接口,例如 C 、C ++ 等等。
MinGW 是一個運行在 Windows 平臺的 C 、C ++ 編譯器,支持 Make 、Gdb 等類似 Linux 環(huán)境下 GCC 的功能。
下面演示一下用 MinGW 將 C 程序編譯成動態(tài)鏈接庫,再使用 Java 的本地方法調(diào)用 C 程序中的函數(shù)。
TP-LINK路由器帶MODEM功能嗎1、創(chuàng)建 Java 類文件并聲明本地接口
package testnative; //未定義包名會調(diào)用時會出現(xiàn) java.lang.UnsatisfiedLinkError
public class CheckFile {
static {// 動態(tài)庫名稱為 test.dll
System.loadLibrary("test");
}
// 本地方法名稱
public native void printHello();
public static void main(String[] args) {
try {// 測試運行
new CheckFile().printHello();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、根據(jù) CheckFile 自動生成 C ++ 頭文件 testnative_CheckFile.h
> javah -classpath . -jni testnative.CheckFile
3、根據(jù)頭文件 testnative_CheckFile.h 編寫 C ++ 程序
4、編譯 C ++ 程序為動態(tài)鏈接庫 test.dll
注意 JDK 的路徑
> g++ -ID:\tools\jdk1.6.0_16\include -ID:\tools\jdk1.6.0_16\include\win32 -fPIC -Wall -g -c CheckFile.cpp
生成 CheckFile.o 文件后,再生成動態(tài)鏈接庫 test.dll
> g++ -shared -Wl,--kill-at -o test.dll CheckFile.o
5、測試執(zhí)行
> java -Djava.library.path=. -cp . testnative.CheckFile
posted on 2011-06-14 10:35
墻頭草 閱讀(324)
評論(0) 編輯 收藏