如何在linux下创建一个简单的JNI程序HelloWorld

如何在linux下创建一个简单的JNI程序HelloWorld,第1张

JNI全名是Java Native Interface,通过JNI技术可以实现Java和其他编程语言的互相调用。这里我们使用的是Java和C的互相调用,Java提供本地接口,C实现该本地接口。

我使用的是RHEL 5,主要是为了测试一下在Linux平台下,了解JNI技术是如何实现的。通过一个HelloWorld实例,具体过程在下面讲解。

首先,实现的是Java本地接口Hello.java,代码如下所示:

class HelloWorld {

    public native void sayHello()

    static {

        System.loadLibrary("HelloWorld")

    }

    public static void main(String[] args) {

        (new HelloWorld()).sayHello()

    }

}

其中,方法声明为native,其实HelloWorld类就相当于一个接口,是为其他编程语言声明的接口。System.loadLibrary("HelloWorld")语句是一个static块,也就是在该HelloWorld类加载的时候进行执行。其中,该语句实现了加载本地的动态连接库(DLL),在Linux平台下,动态连接库文件是以.so作为扩展名的,也就是标准对象(Standard Object)。

对该本地接口类进行编译:

[root@localhost jni]# javac HelloWorld.java

接着,通过编译的HelloWorld.class文件,生成C语言的头文件,执行命令:

[root@localhost jni]# javah -jni HelloWorld

可以看到,在当前目录下生成一个HelloWorld.h文件,该文件就是C的接口文件,为使用C实现Java接口中定义的方法,可以发现在HelloWorld.h中有一个方法声明:

#ifndef __HelloWorld__

#define __HelloWorld__

#include <jni.h>

#ifdef __cplusplus

extern "C"

{

#endif

JNIEXPORT void JNICALL Java_HelloWorld_sayHello (JNIEnv *env, jobject)

#ifdef __cplusplus

}

#endif

#endif /* __HelloWorld__ */

然后,用C实现该方法,在HelloWorld.c文件中,代码如下:

#include <jni.h>

#include "HelloWorld.h"

#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_sayHello (JNIEnv *env, jobject obj) {

    printf("Hello,the World!!!")

}

这里,方法签名为Java_HelloWorld_sayHello (JNIEnv *env, jobject obj),添加了形参obj,否则无法通过编译。

接下来,生成动态连接库libHelloWorld.so,执行命令:

[root@localhost jni]# gcc -fPIC -shared -o libHelloWorld.so HelloWorld.c

可以在当前目录下看到libHelloWorld.so,动态连接库文件名称以lib开头。将该文件拷贝到usr/lib目录下面,就可以测试了。

现在执行如下命令进行测试:

[root@localhost jni]# java HelloWorld

输出如下:

Hello,the World!!!

这只是一个非常简单的例子,主要是了解JNI在Linux下该如何用。在实际应用中,可能会非常复杂,并且要记住,一旦使用了JNI技术,系统的可移植性被破坏了。有些应用中,正是基于这种特性实现,比如限制软件的传播使用,保护开发商权益,等等。

Linux运行错误及解决办法。

1、查询Linux系统内有多少java版本。2、然后一个个删除干净(输入rpm -e --nodeps +“存在的java版本”)有多少删除多少。 3、检验原有的java版本是否全部移除 。4、原有的版本移除后配置新安装的java环境变量 。 5、最后更新一下 , 完成。

LINUX *** 作系统是一种免费使用和自由传播的类UNIX *** 作系统。其内核由林纳斯·托瓦兹于1991年10月5日首次发布,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。它能运行主要的Unix工具软件、应用程序和网络协议,是一个性能稳定的多用户网络 *** 作系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7227109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存