posts - 241,  comments - 116,  trackbacks - 0
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 墙头草 阅读(312) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
人人游戏网 软件开发网 货运专家