Java 程序可以“一次编写,到处运行”,原因是它运行在 Ja va 虚拟机上。
正是由于这个原因,它的执行效率也会相应打些折扣,特别是一些与操作系统连接比较紧密的操作。
所以 Java 也提供了本地接口,以便直接调用其它更高效的程序接口,例如 C 、C ++ 等等。
MinGW 是一个运行在 Windows 平台的 C 、C ++ 编译器,支持 Make 、Gdb 等类似 Linux 环境下 GCC 的功能。
下面演示一下用 MinGW 将 C 程序编译成动态链接库,再使用 Java 的本地方法调用 C 程序中的函数。
TP-LINK路由器带MODEM功能吗1、创建 Java 类文件并声明本地接口
package testnative; //未定义包名会调用时会出现 java.lang.UnsatisfiedLinkError
public class CheckFile {
static {// 动态库名称为 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、根据 CheckFile 自动生成 C ++ 头文件 testnative_CheckFile.h
> javah -classpath . -jni testnative.CheckFile
3、根据头文件 testnative_CheckFile.h 编写 C ++ 程序
4、编译 C ++ 程序为动态链接库 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 文件后,再生成动态链接库 test.dll
> g++ -shared -Wl,--kill-at -o test.dll CheckFile.o
5、测试执行
> java -Djava.library.path=. -cp . testnative.CheckFile
posted on 2011-06-14 10:35
墙头草 阅读(319)
评论(0) 编辑 收藏