프로그래밍 언어/JAVA

[예제] 간단한 JNI 예제 작성

투칼론 2015. 3. 8. 15:01
반응형

[작업 순서]

1

 C Function을 호출하는 자바 프로그램(HelloJNI.java) 작성 후 .class 생성

2

 C 프로그램(HelloJNI.h와 HelloJNI.c) 작성 후 Shared Library 생성

3

 테스트. $java  HelloJNI


1. C Function을 호출하는 자바 프로그램(HelloJNI.java) 작성

<HelloJNI.java>


Line 3

 Native 동적 라이브러리(Windows에서는 .dll 파일, Linux에서는 .so 파일)를 로딩한다. 위의 예제에서는 libhello.so(Linux) 또는 hello.dll(Winodws)를 로딩한다는 의미이다.

Line 6

 JNI를 통해 제공되는 함수 선언


2. C 프로그램(HelloJNI.h와 HelloJNI.c) 작성 및 Shared Library 생성

<HelloJNI.h>


Line 1

 $JAVA_HOME/include 디렉토리에 있는 "jni.h"를 include한다.

 Linux에서 컴파일 오류가 발생하여, jni.h 파일에서 #include "jni_md.h" 내용을 #include "linux/jni_md.h" 변경해주었다.

Line 9

 C function은 Java_{package_and_classname}_{function_name}(JNI arguments) 명명규칙을 가지고 있다. Java의 Package의 .(dot)가 _(underscore)로 변경됨에 주의.

 JNIEnv *는 JNI 함수에서 참조하는 JNI Enviroment

 jobject는 this 오브젝트임


<HelloJNI.c>


<Compile & 동적 라이브러리 생성>

 $gcc -fPIC  -I$JAVA_HOME/include -c HelloJNI.c

 $gcc -fPIC -I$JAVA_HOME/nclude -shared -o libhello.so HelloJNI.o


3. 테스트


[글참조] https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html