Akashic Records

JNI Hello World Program 본문

오래된글/Java

JNI Hello World Program

Andrew's Akashic Records 2018. 4. 9. 13:00
728x90

JNI?

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


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

728x90

'오래된글 > Java' 카테고리의 다른 글

Lessons learned from getting .NET to REST with Java  (0) 2018.04.09
JUnitParams  (0) 2018.04.09
JMX-Communication with Notifications  (0) 2018.04.09
JMS - 기초  (0) 2018.04.09
자바 nio - 14  (0) 2018.04.09
Comments