在Linux平台下使用JNI

[color=green]参考:http://www.ibm.com/developerworks/cn/java/l-linux-jni/[/color]

[color=green]但参考中的版本过于古老,不利于初学者参照。[/color]

环境: 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值