六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 22|回复: 0

在Linux平台下使用JNI

[复制链接]

升级  94%

11

主题

11

主题

11

主题

童生

Rank: 1

积分
47
 楼主| 发表于 2013-2-3 10:29:51 | 显示全部楼层 |阅读模式
参考: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 functionJNIEXPORT 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.solrwxrwxrwx 1 mg mg   16 2010-04-07 13:28 libHelloJni.so -> libHelloJni.so.1lrwxrwxrwx 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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表