Java Native Method

来源:互联网 发布:最好的交友软件 编辑:程序博客网 时间:2024/05/21 18:42

大家都知道,Java最重要的一项神奇能力是“一次编译,处处运行”。那么对于我们之前大量的使用其它语言编译的程序怎么处理呢,扔掉吗?当然不,接下来就该我们的Java Native Method出场了。

通过写Native Method我们可以把我们写的C代码引入Java中。接下来,我将逐步告诉你创建Native Method并在Java应用程序中使用它们的基本方法。

分七步:
1.编写Java代码
2.编译Java代码
3.创建C头文件
4.创建C存根文件
5.编写C代码
6.创建共享代码库或DLL
7.运行程序
我们编写一个使用Native method来输出文字的程序进行练习。

编写Java代码

和平时编写Java代码一样。在你的Java代码中使用Native Method你需要做两件事。第一,给你想使用的Native Method进行声明。这个和平时进行声明一样,但是你必须使用native关键字。如下:

public native void nativePrint();static{System.LoadLibrary("nppx");}

创建一个Nppx.java的文件如下:

class Nppx{public native void nativePrint();static{System.LoadLibrary("nppx");}public static void main(String[] args){Nppx nppx=new Nppx();nppx.nativePrint();}}

编译Java代码
编译Nppx.java文件

%javac Nppx.java

创建C头文件
我们有各种各样的方式可以是我们的C代码可以被当作native method来使用,Java编译器中的javah就提供了这种功能,来生成必要的声明。

%javah Nppx

创建C存根文件
类似于C++编译器,Java编译器也有类似的功能,可以省去我们大量编写枯燥代码的麻烦,为了使我们的Java运行时可以使用我们的C代码,java 编译器会自动生成必要的代码

%javah -stubs Nppx

编写C代码
好了,接下来让我们写一点具体的方法来打出我们的欢迎字幕。按惯例,我们为C文件命名为Nppxlmp.c。代码如下:

#include <StubPreamble.h>#include "Nppx.h"#include <stdio.h>void Nppx_Print(struct NNppx *this){puts("Hello,our Native Method!");}

当然,如果使你的C代码完全和Java无缝运行还有许多问题需要去解决,比如如何传递或返回不同的类型…

创建共享代码库
这部分和系统关联最紧密,不同的平台、不同的编译器对共享代码库的创建和使用方式都不同。使用不同的windows平台都需要去查阅相关系统的C说明文档。
对于Linux系统来说,我们可以使用GCC来完成共享代码库的创建。第一,编译我们之前创建好的C文件。你需要告诉编译器文件的位置及Java native method支持文件的位置

%gcc -I/usr/local/java/include -i/usr/local/java/include/genunix -fpic -c Nppx.c Nppxlmp.c

接下来,创建共享代码库文件(.o)

%gcc -shared -WL,-soname,lib nppx.so.1 -o lib nppx.so.1.0 Nppx.o Nppxlmp.o

复制共享代码库文件

%cp libnppx.so.1.0 libnppx.so

最后,你需要告诉你的动态链接器在哪里找你新创建的共享代码库文件,使用bash shell:

% export LD_LIBRARY_PATH='pwd';$LD_LIBRARY_PATH

运行程序
和平时一样

% java Nppx
0 0