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.classMain.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