centos 5.3 java jni sample

如果要参考jni的说明,请看

http://java.sun.com/docs/books/jni/

如果想看gcc的使用,请看

http://gcc.gnu.org/onlinedocs/

1.创建java文件

class HelloWorld {

private native void print();

public static void main(String[] args) {

new HelloWorld().print();

}

static {

System.loadLibrary(“HelloWorld”);

}

}

2.编译java

javac HelloWorld.java

3.生成header文件

javah -jni HelloWorld

4.查看 header文件

/* 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:    print

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloWorld_print

(JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

5.编写C 文件

#include <jni.h>

#include “HelloWorld.h”

JNIEXPORT void JNICALL

Java_HelloWorld_print(JNIEnv *env, jobject obj)

{

printf(“Hello World!
“);

return;

}

6.编译c文件,并生成 .so 文件

a. 编译命令,生成libHelloWorld.o

gcc -I/env/java/include -I/env/java/include/linux -fPIC -o libHelloWorld.o -c HelloWorld.c

b.生成动态库文件,libHelloWorld.so.1.0

gcc -shared -WI,-soname,libHelloWorld.so.1 -o libHelloWorld.so.1.0 libHelloWorld.o

接下来将生成的共享库拷贝为标准文件名

cp libHelloWorld.so.1.0 libHelloWorld.so7.编写运行脚本 run.sh

#!/bin/bash

export JAVA_HOME=/env/java

CLASSPATH=.:$JAVA_HOME/lib/rt.jar:JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

java -cp ./HelloWorld.class -cp $CLASSPATH HelloWorld

添加运行权限

chmod a+x run.sh

8.运行脚本 并确认结果

[test@host jnitest]$ ./run.sh

Hello World!

[test@host jnitest]$

 

9. 为了 编译c文件的方便,写一个makefile

Makefile 文件内容如下

CC :=gcc

TARGET := libHelloWorld.so

JNI_INCLUDE := -I/env/java/include -I/env/java/include/linux

libHelloWorld.so : libHelloWorld.o

$(CC) -shared -WI,-soname,libHelloWorld.so.1 -o libHelloWorld.so.1.0 $^

cp libHelloWorld.so.1.0 libHelloWorld.so

libHelloWorld.o : HelloWorld.c

$(CC) $(JNI_INCLUDE) -fPIC -o $@ -c $^

clean:

rm -rf *.o *.so *.so.*

10.清理 并 编译

[test@host jnitest]$ make clean

[test@host jnitest]$ make

 

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>