Java Native Method の作り方 (1)
1. Java コードを書く
HelloWorld.java Native Mathod を持つクラス。
class HelloWorld {
// Native Method
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
} |
Main.java
class Main {
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
|
2. Java コードをコンパイルする
% javac HelloWorld.java
% javac Main.java
この処理後には、HelloWorld.class と Main.class が作成される。
3. .h ファイルを作る
% javah -jni HelloWorld
この処理後には、HelloWorld.h が作成される。
4. Native Mathod コードを書く
HelloWorldImp.c
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
|
5. Shared Library を作成する
% cc -G -I/usr/local/jdk1.1.4/include -I/usr/local/jdk1.1.4/include/solaris\
HelloWorldImp.c -o libhello.so
この処理後には、libhello.so が作成される。Linux の場合は、
% gcc -shared -I/usr/local/jdk1.1.3/include -I/usr/local/jdk1.1.3/include/genunix\
HelloWorldImp.c -o libhello.so
かな?
6. 実行
% java Main
Hello world!
もし次のようなエラーが実行時に出力された場合は、LD_LIBRARY_PATHを設定する。
java.lang.UnsatisfiedLinkError: no hello in shared library path
at java.lang.Runtime.loadLibrary(Runtime.java)
at java.lang.System.loadLibrary(System.java)
at
at java.lang.Thread.init(Thread.java)
% setenv LD_LIBRARY_PATH /your/ld/library/path