`
marlgl
  • 浏览: 71569 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Linux平台下使用JNI

    博客分类:
  • J
阅读更多
参考:http://www.ibm.com/developerworks/cn/java/l-linux-jni/

但参考中的版本过于古老,不利于初学者参照。

环境: gentoo, jdk-1.6, gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5)

1.
$ vi HelloJni.java
$ cat HelloJni.java 
class HelloJni {

    public native void SayHello(String name);

    static {
        try {
            System.loadLibrary("HelloJni");
        }
        catch (UnsatisfiedLinkError e) {
            System.err.println("Cannot load HelloJni library:\n " +
                    e.toString());
        }
    }

}

2.
 $ export CLASSPATH=.:$CLASSPATH
 $ javac HelloJni.java


3.
$ javah -classpath . HelloJni


4.
$ vim HelloJni.cpp
$ cat HelloJni.cpp 
#include "HelloJni.h"
#include <stdio.h>

//@see HelloJni.h function
JNIEXPORT void JNICALL Java_HelloJni_SayHello (
        JNIEnv * env, jobject arg, jstring instring) {
    //从instring字符串取得指向字符串UTF编码的指针
    const jbyte *str = 
        (const jbyte *)env->GetStringUTFChars(instring, JNI_FALSE);
    printf("Hello, %s\n", str);
    //通知虚拟机本地代码不再需要通过str访问Java字符串。
    env->ReleaseStringUTFChars(instring, (const char *)str);
    return;
}

5.
$ g++ -fPIC -O2 -shared -Wl,-soname,libHelloJni.so.1 -o libHelloJni.so.1.0 -I/opt/sun-jdk-1.6.0.17/include/ -I/opt/sun-jdk-1.6.0.17/include/linux HelloJni.cpp

$ ln -sf libHelloJni.so.1.0 libHelloJni.so.1
$ ln -sf libHelloJni.so.1 libHelloJni.so

lrwxrwxrwx 1 mg mg   16 2010-04-07 13:28 libHelloJni.so -> libHelloJni.so.1
lrwxrwxrwx 1 mg mg   18 2010-04-07 13:28 libHelloJni.so.1 -> libHelloJni.so.1.0
-rwxr-xr-x 1 mg mg 6659 2010-04-07 14:20 libHelloJni.so.1.0

6.
$ vim ToSay.java
$ cat ToSay.java 
import java.util.*;

public class ToSay {
    public static void main(String argv[]) {
        ToSay say = new ToSay();
    }
    
    public ToSay() {
        HelloJni h = new HelloJni();
        //调用本地方法向Marlgl问好
        h.SayHello("Marlgl");         
    }
}

 $ javac ToSay.java
 $ java ToSay
 Hello, Marlgl



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics