`

Java JNI例子(ubuntu)

 
阅读更多

1、创建HelloWorld.java

class HelloWorld {

    public native void sayHello();

    static {
        System.loadLibrary("HelloWorld");
    }

    public static void main(String[] args) {
        (new HelloWorld()).sayHello();
    }
}

 2、编译生成HelloWorld.class

root@meie:~/Desktop#javac HelloWorld.java

 3、编译生成HelloWorld.h

root@meie:~/Desktop#javah HelloWorld

4、编译生成libHelloWorld.so(注意jdk参数指向)

root@meie:~/Desktop# gcc -shared -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -I /usr/in
clude/ HelloWorld.c -o libHelloWorld.so
 

5、创建HelloWorld.c文件

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_sayHello (JNIEnv *env, jobject obj) {
    printf("Hello,the World!!!");
}

6、测试代码,成功

java -Djava.library.path=.  HelloWorld

 注意:直接用 java HelloWorld会报错

root@meie:~/Desktop# java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1028)
	at HelloWorld.<clinit>(HelloWorld.java:6)
Could not find the main class: HelloWorld.  Program will exit.

 这时java文件中loadlib时找不到这个so导致的,我们这样来运行:"java -Djava.library.path=.  HelloWorld",通过设置java.library.path来找到这个so。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics