Chinaunix首页 | 论坛 | 博客
  • 博客访问: 413967
  • 博文数量: 73
  • 博客积分: 3120
  • 博客等级: 中校
  • 技术积分: 785
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-20 12:26
文章分类

全部博文(73)

文章存档

2013年(4)

2012年(10)

2011年(32)

2010年(27)

分类: LINUX

2011-03-20 17:55:44

本文以一个简单的实例来介绍Java和Native之间的函数调用。

 

 1、创建HelloWorld.java

class HelloWorld{

        private native void print();

        public static void main(String[] args){

                new HelloWorld().print();

        }

        static {

                System.loadLibrary("HelloWorld");

        }

}

 

2、编译HelloWorld.java,生成HelloWorld.class

javac HelloWorld.java

 

3、由HelloWorld.class创建JNI头文件HelloWorld.h

javah -jni HelloWorld   生成的HelloWorld.h内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class HelloWorld */

 

#ifndef _Included_HelloWorld

#define _Included_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     HelloWorld

 * Method:    print

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_HelloWorld_print

  (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

 

4、编写Native函数HelloWorld.c,内容如下:

#include

#include

#include "HelloWorld.h"

 

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)

{

        printf("helloWorld!\n");

        return;

}

 

5、编译HelloWorld.c生成动态库文件HelloWorld.so

gcc –shared -I /usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include -I /usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include/linux -I $PWD HelloWorld.c -o libHelloWorld.so

参数-shared表示生成动态链接库。 -I表示包含的头文件路径

 

 6、运行HelloWorld程序

 java HelloWorld

运行结果:helloWorld!

-Djava.library.path=.表示添加当前目录为.so的库文件路径

阅读(887) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~