jni 编程简单例程

来源:互联网 发布:android javascript 编辑:程序博客网 时间:2024/06/15 21:27

机器环境:Centos 6.5 x64

jdk版本: jdk 1.7



首先编写一个简单的java函数,函数名称为Hello.java

class Hello{        public native void add(int a,int b);        static{                System.loadLibrary("hello");        }        public static void main(String[] args)        {                new Hello().add(3,4);        }}

使用javac将这个文件编译成字节码(就是.class文件)

# javac  Hello.java

此时,这个目录中便有2个文件(Hello.java和Hello.class)

接着生成.h文件。

# javah -jni  Hello

这个命令将会生成Hello.h文件,内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class Hello */#ifndef _Included_Hello#define _Included_Hello#ifdef __cplusplusextern "C" {#endif/* * Class:     Hello * Method:    add * Signature: (II)V */JNIEXPORT void JNICALL Java_Hello_add  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif

下面编写一个c程序,内容如下,文件名Hello.c

#include <stdio.h>#include "./Hello.h"JNIEXPORT void JNICALL Java_Hello_add  (JNIEnv *env, jobject obj, jint a, jint b){        printf("a + b = %d\n",a+b);}

接着使用gcc工具将这个c文件编译成动态库,编译之前首先要将jdk安装目录中的jni.h和jni_md.h文件复制到/usr/include中。否则gcc编译时将无法找到这两个头文件。

# cp /usr/java/jdk1.7.0_40/include/jni.h     /usr/include# cp /usr/java/jdk1.7.0_40/include/linux/jni_md.h   /usr/include 

接着执行gcc编译命令:

# gcc -shared -fPIC -o libhello.so Hello.c

编译完成后。将当前目录加入到LD_LIBRARY_PATH环境变量中。

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
# java  Hello





0 0