2011년 6월 13일 월요일

JNI Hello World Program

JNI?
JNI는Java Native Interface의 약어입니다.Java의 프로그램으로부터 다른 언어(C언어나 C++언어등)로 개발된 native code의 프로그램을 이용하기 위한 API입니다.

개발환경
OSRedHat Linux 9.0
J2SE SDK1.4.2_06
C컴파일러gcc 3.2.2


gcc가 인스톨되어 있지 않은 경우는 인스톨 CD 혹은http://gcc.gnu.org/로부터 다운로드해 인스톨 해 주세요.

Sample 작성
Java file
public class HelloWorldJNI {
static {
// 라이브러리를 로드합니다
System.loadLibrary("HelloWorldJNI");
}
// 네이티브 메소드를 선언합니다
public native String sayHelloWorld();
public static void main(String[] args) {
HelloWorldJNI hello = new HelloWorldJNI();
// 메소드를 실행해 표시합니다
System.out.println(hello.sayHelloWorld());
}
}


위 파일을 compile한다.

C++언어의 헤더 파일의 생성
헤더 파일은 이하와 같이javah라고 하는 커멘드로 생성할 수 있습니다. 옵션에는-jni를 지정해, 인수에는 위에서 컴파일 한 클래스의 확장자(extension)를 제외한 것을 지정합니다.
“javah -jni HelloWorldJNI”
생성된 HelloWorldJNI.h 파일 내용
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorldJNI */
#ifndef _Included_HelloWorldJNI
#define _Included_HelloWorldJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorldJNI
* Method: sayHelloWorld
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_HelloWorldJNI_sayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
~


C++언어의 원시 파일의 작성
HelloWorldJNI.cpp
#include "HelloWorldJNI.h"
JNIEXPORT jstring JNICALL
Java_HelloWorldJNI_sayHelloWorld (JNIEnv *env,
jobject obj ) {
return env->NewStringUTF("Hello World");
}


C++ 컴파일
“gcc -shared -I/usr/java/include/ -I/usr/java/include/linux/ HelloWorldJNI.cpp -o libHelloWorldJNI.so”

실행
java HelloWorldJNI

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...