JNI(java native interface)实验

NI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java NativeInterface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

编写下面3个源文件之后依次在shell下输入以下命令:

unset LD_LIBRARY_PATH

export LD_LIBRARY_PATH=. #将在当前目录下找共享库,找到我们自己做的hello库

JavaHome=/usr/java/jdk1.7.0_01/include

javac HelloWorld.java #在当前目录下编译生成HelloWorld.class文件

javah HelloWorld#生成接口头文件,我们需要实现此头文件内的接口声明
gcc -I$JavaHome -I${JavaHome}/linux -shared -o libhello.so HelloWorldImp.c #生成hello动态库
java -classpath . HelloWorld#可以运行了

1.Hello.java源文件

class HelloWorld{

    public HelloWorld(){}
    public native void displayHelloWorld();
    static{System.loadLibrary("hello");}
    public static void main(String[] args){
        new HelloWorld().displayHelloWorld();    
    }

}

2.HelloWorld.h头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3.接口实现HelloWorldImp.c

#include "jni.h"
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *a, jobject b){
    printf("Hello world!\n");
    return;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值