|
楼主 |
发表于 2005-12-26 10:38:59
|
显示全部楼层
如果要把HelloWorld.class的main和native方法放在客户文件和库文件要怎么做??
更改HelloWorld.java文件
- package hello;
- public class HelloWorld {
-
- static {
- System.loadLibrary("hello");
- }
-
- public native void displayHelloWorld();
- }
复制代码
编译之
javac -d . HelloWorld.java
自动会在当前目录下创建hello目录,在hello目录下有HelloWorld.class文件
让javah创建c所需头文件
javah hello/HelloWorld
在当前目录下得到了hello_HelloWorld.h文件
让我们看一下hello_HelloWorld.h文件的内容
- #include <jni.h>
- #ifndef _Included_hello_HelloWorld
- #define _Included_hello_HelloWorld
- #ifdef __cplusplus
- extern "C" {
- #endif
- JNIEXPORT void JNICALL Java_hello_HelloWorld_displayHelloWorld(JNIEnv*, jobject);
- #ifdef __cplusplus
- }
- #endif
- #endif
复制代码
创建客户文件HelloWorldClinet.java文件
- import hello.HelloWorld;
- public class HelloWorldClient{
- public static void main(String[] args) {
- new HelloWorld().displayHelloWorld();
- }
- }
复制代码
编译之
javac HelloWorldClient.java
得到HelloWorldClinet.class文件
这时候轮到主角C出场了,呵呵
- #include "hello_HelloWorld.h"
- #include <stdio.h>
- JNIEXPORT void JNICALL
- Java_hello_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
- {
- printf("Hello world!\n");
- return;
- }
复制代码
命名为HelloWorldImp.c。
编译之
gcc HelloWorldImp.c --shared -o libhello.so
重新设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=`pwd`
如此运行java HelloWorldClinet
请注意整个攻略中,应该将CLASSPATH设置为.:/usr/lib/kaffe/jre/lib/rt.jar:/usr/lib/kaffe/jre/lib/tools.jar |
|