JNI HelloWorld簡単記録

1723 ワード

JNIを使って、復習しなければなりません.
馬に乗る:
public class HelloWorld{
	public native void sayHi();
	
	static {
		System.loadLibrary("hello");
	}
	public static void main(String args[]){
		new HelloWorld().sayHi();
	}
}

ファイルのコンパイル
javac HelloWorld.java 

ヘッダファイルの生成
javah -jni HelloWorld

Cコードの作成:
#include "HelloWorld.h"
#include <stdio.h>


JNIEXPORT void JNICALL Java_HelloWorld_sayHi (JNIEnv *env, jobject object)
{
	printf("Hello World!
"); return; }

クラスライブラリファイルの生成
gcc -shared -fpic -I/usr/lib/jvm/java-1.6.0-openjdk/include -I/usr/lib/jvm/java-1.6.0-openjdk/include/linux -o libhello.so HelloWorld.c

2つの-Iオプションがあります.この2つのオプションのプロパティ値はそれぞれ
/usr/lib/jvm/java-1.6.0-openjdk/include
および
/usr/lib/jvm/java-1.6.0-openjdk/include/linux

表示,jni.h jni_md.hが存在するパスは、クラスライブラリlibhelloを得ることができます.so
このクラスライブラリをjavaに配置します.library.パスの中でよかったのですが、
java.library.pathの取得は
String libPath = System.getProperty("java.library.path");
で取得します.
私は/usr/libを使っています.
cp libhello.so/usr/lib
HelloWorldの実行
java HelloWorld

ps:
1、この過程で出会ったjni.h jni_md.h見つからない問題は、グーグルで簡単に解決策を見つけました.ここでグーグルに感謝します.
2、私のシステムのバージョンは:
Linux version 2.6.35.6-45.fc14.i686 ([email protected]) (gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) ) #1 SMP Mon Oct 18 23:56:17 UTC 2010

<全文完了>