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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...