�� �忡���� Java�� �ۼ��� ���α��� native �ڵ带 ���ս�Ű�� ����� �����Ѵ�. ������, ��Hello World�� ���α��� ���õȴ�.
Java ���α����� ����� native �ҵ带 �ۼ��ϴ� ����� ������ ����.
step 1 : Write the Java code
Java Ŭ������ �ۼ��Ѵ�. �ٸ� ���̶�� Ŭ���� �߿� �ҵ�� native�� ����� ���� ���ȴٴ� ���̴�.
step 2 : Compile the Java code
�Ϲ� ����� ���� javac�� �̿��ؼ� �������Ѵ�.
step 3 : Create the .h file
javah�� �̿��ؼ� ?jni �ɼ��� �ָ� ��������� ������ �� �ִ�.
step 4 : Write the Native Method Implementation
native ���α��� �ۼ��Ѵ�.
step 5 : Create a Shared Library
native ���α��� ������ ��������� ��� ���̺귯���� ���鵵�� �������Ѵ�.
step 6 : Run the Program
java(java interpreter)�� �̿��ؼ� java ���α��� �����Ų��.
���� ��� �� Java �ڵ�� ������ ����.
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
native Ű���带 ����ϰ� �Ǹ�, �� �ҵ忡 ���� native �ڵ��� �Լ��� ����� �� �ְ� �ȴ�. �̰��� ���� Ŭ���� ���ο����� ���� �ϰ� �ȴ�. ���� ���������� public ���̰�, ���ϰ��� �μ��� ����Ǿ� ���� �ʴ�. �̰��� ����ϴ� ����� �ڿ��� ������ �ȴ�.
������ native �ڵ带 ���̺귯���� �������ؾ� �Ѵ�. �� ���̺귯�� �̸��� System.LoadLibrary(library name)������ library name�� �����ؾ� �Ѵ�. ���� ���������� hello�� ������ �Ǿ� �ִµ�, win32������ hello.dll��, Solaris ������ libhello.so�� �ȴ�. static���� ����Ǿ �������� �ʱ�ȭ�ϰ� �Ǵ� �Ϳ� ������ �ʿ䰡 �ִ�.
�Ϲ� �ҵ带 �����Ű�� �Ͱ� �������� ������� ������ �ҵ带 ȣ���ϸ� �ȴ�.
�������ϴ� ����� �Ϲ������� �������ϴ� ����� �����ϴ�.
��������,
javac HelloWorld.java
�� ���� ����ϸ� �ȴ�.
javah�� ����ϸ� ���� ��������� ������ �� �ִ�. -jni �ɼ��� �ֵ��� �Ѵ�. -d �ɼ��� ����ϸ� �ٸ� ���丮�� ��������� ��ġ��ų ���� �ִ�.
������ HelloWorld Ŭ�����κ��� ������ ��������� �����̴�.
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
<jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C"
{
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature:
()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
���� ���뿡�� native �ڵ忡�� �ۼ��ؾ� �� �Լ��� ������Ÿ���� ����Ǿ� �ִ�. ������Ÿ���� �����Ǵ� ����� ���� ���� ����.
JNIEnv �Ķ���� ���ؼ� native �ڵ尡 Java ���α����� �Ѱ��� ���ڸ� ���� �� �ְ�, �ٽ� Java ���α����� ���ϰ��� �Ѱ��� �� �ְ� �ȴ�. jobject�� ������ ��ü�� �ǹ��Ѵ�. Java ���α����� ��this���� ���Ǵ� �Ͱ� ���ٰ� �� �� �ִ�.
������ ����� �ڵ带 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;
}
���� ���������� �� ������ ��������� ���Եȴ�.
Java ���α����� ������ ���� �ڵ带 �ۼ��� �ߴ�.
System.loadLibrary(��hello��);
���Ƿ�, �� hello��� ���̺귯���� ������ �־�� �Ѵ�. �̰��� �տ��� �ۼ��� C������ �����������ν� ���� �� �ִ�.
Solaris�� ��쿡�� ������ ���� ������ �������� ������ �� �ִ�.
cc -G -I/usr/local/java/include -I/usr/local/java/include/solaris HelloWorldImp.c -o libhello.so
Win32�� ��쿡�� ������ ���� ������ �������� ������ �� �ִ�.
cl -Ic:\java\include -Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll
Java Interpreter�� �̿��ؼ� �ۼ��� ���α��� �����Ų��. ������ �����Ų�ٸ�,
java HelloWorld
��� �ϸ� �ȴ�.
������ ���� ���� ������ ���Ѵٸ� �н� ������ �߸��� �־��� �����̴�. �н� ������ �ٽ� Ȯ���ϰ� �����ؼ� �����ϸ� �ȴ�.
java.lang.UnsatisfiedLinkError: no hello in shared library path
at java.lang.Runtime.loadLibrary(Runtime.java)
at java.lang.System.loadLibrary(System.java)
at java.lang.Thread.init(Thread.java)