如何在Linux下如何使用JNI

 时间:2024-11-05 06:47:51

1、大家都知道Java是跨平台的,可以说Java的出现带给我们巨大的方便。设想如果我们的应用中需要访问到特定的设备,甚至是仅符合公司内部信息交互规范的设备,或某个特定的操作系统才有的特性,用Java来做显然是十分不方便的,面对这些问题,Sun公司在 JDK1.0 中就定义了 JNI 规范,它规定了 Java 应用程序对本地方法的调用规则。我将详细说明在 Linux 平台下如何实现本地共享库与 Java 协同工作,老规矩以Hello world为例。

2、定义一个 Java 类 -- Hello类这里有两个注意事项:首先:为要使用的每个本地方法编写本地方法声明,只是必须指定 native 关键字,如下所示:public native void SayHello(String strName);其次:必须显式地加载本地代码库。我们需在类的静态块中加载这个库(静态库在类加载时候就会调用)现在我们来编辑hello.java以生成hello.class文件。

如何在Linux下如何使用JNI

3、生成本地链接库要为以上定义的类生成 Java 本地接口头文件,需使用 javah,Java 编译器的 javah 功能将根据 Hello 类生成必要的声明,本文涉及的工具软件和命令示范都可以在linuxprobe.com中找到相关的解释,此命令将生成 Hello.h 文件生成的 Hello.h 文件 内容如下所示:

如何在Linux下如何使用JNI

4、在与 Hello.h 相同的路径下创建一个 CPP 文件 Hello.cpp内容如下:这里有三个参数,下面讲一下参数用法:(1)所有的 JNI 调用都使用了 JNIEnv * 类型的指针,习惯上在 CPP 文件中将这个变量定义为 evn,它是任意一个本地方法的第一个参数。env 指针指向一个函数指针表,在 VC 中可以直接用"->"操作符访问其中的函数。(2)jobject 指向在此 Java 代码中实例化的 Java 对象 LocalFunction 的一个句柄,相当于 this 指针。(3)第三个参数就是本地调用中有 Java 程序传进的参数,本例中只有一个 String 型参数。 对于字符串型参数,因为在本地代码中不能直接读取 Java 字符串,而必须将其转换为 C /C++ 字符串或 Unicode。

如何在Linux下如何使用JNI

5、编译生成共享库。使用 GCC 时 , 必须通知编译器在何处查找此 Java 本常挢傣捅地方法的支持文件,并聂馏笔彗且显式通知编译器生成位置无关的代码,在我的环境中按如下过程编译:gcc -I/home/jbuilder/jdk1.3.1/include -I/home/jbuilder/jdk1.3.1/include/linux -fPIC -c Hello.c生成 Hello.ogcc -shared -Wl,-soname,libhello.so -o libhello.so Hello.o生成 libhello.so(这就是linux下动态链接库的文件名格式,就像windows下是.dll文件后缀名类似)最后通知动态链接程序此共享文件的路径。export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

6、编写一个简单的 Java 程序来测试我们的本地方法将如下源码存为 A.java:用 javac 编译A.java,生成A.class向执行普通 Java 程序一样使用 java A,我们会看到在屏幕上出现 Hello world。ok,完成!

如何在Linux下如何使用JNI
  • 在Linux下如何使用JNI
  • 在linux下使用SSH的方法
  • 怎么在linux的CLI下运行php文件
  • linux下文本编辑器
  • netstat命令详解(linux下)
  • 热门搜索
    精美手抄报 感恩主题手抄报 校园是我家手抄报 有关于元宵节的手抄报 防火手抄报资料 六年级上册手抄报 四年级手抄报内容 只要妈妈露笑脸手抄报 地震知识手抄报 我爱读书手抄报花边