2014年4月3日 星期四

JNI Example

由於許多控制電子元件適合用Native Code來做, 於是關注了JNI 的一些功能. 不可免俗的也做了JNI 版本的 HelloWorld.


1. 首先建立要使用JNI的 JavaCallC.java 檔 以及 要被JNI呼叫的 JavaCallC.c 檔
#include <jni.h>
#include "JavaCallC.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_JavaCallC_csayhello(JNIEnv *env, jobject obj)
{
printf("Hello world from C Language JavaCallC.c csayhello!\n");
return;
}
view raw JavaCallC.c hosted with ❤ by GitHub
import java.lang.*;
public class JavaCallC {
public JavaCallC (){
System.loadLibrary("JavaCallC");
}
public native void csayhello();
public static void main(String[] args) {
// TODO Auto-generated method stub
new JavaCallC().csayhello();
}
}
view raw JavaCallC.java hosted with ❤ by GitHub
2. 利用建立好的 JavaCallC.java 產生 JavaCallC.h
javac JavaCallC.java
javah -jni JavaCallC

3. 產生 libJavaCallC.so
gcc -shared -I /opt/java/jdk1.7.0_21/include/ -I /opt/java/jdk1.7.0_21/include/linux/ JavaCallC.c -o libJavaCallC.so

4. 執行
java -Djava.library.path=. JavaCallC

5.結果輸出
Hello world from C Language JavaCallC.c csayhello!

參考資料