JNI 기본 설정

Java/JNI 2015. 8. 26. 16:05

1. Java 클래스 구현

HelloJniClass.java

public class HelloJniClass {

 native void Hello(); // native 함수

 static {  System.loadLibrary("Hello_DLL");   }  // 로드할 라이브러리 Hello_DLL.dll 을 로드합니다.

 public static void main(String args[]) {    

  HelloJniClass myJNI = new HelloJniClass();

  myJNI.Hello(); // native 함수 호출

 }

}

-> javac HelloJniClass.java

HelloJniClass.class 파일 생성됩니다.


2. C용 헤더 파일 생성

-> javah HelloJniClass

HelloJniClass.h 가 생성됩니다. 이 파일은 구현해야 할 함수가 선언되어 있습니다.

클래스패스 선언에 유의합니다. 

(ex:C:\dev\jniWS\study\target\classes\com\my\study> javah -classpath C:\dev\jniWS\study\target\classes com.my.study.HelloJniClass)


3. dll 파일 생성

HelloJniClass.h를 이용해서 원하는 기능을 수행하는 dll 파일을 작성합니다.

HelloWorldLib.c


#include "stdafx.h"

#include <stdio.h>

#include "jni.h"

#include "HelloJniClass.h"

JNIEXPORT void JNICALL Java_HelloJniClass_Hello(JNIEnv *env, jobject jobj) { 

     printf("Hello Jni~!");  // 원하는 기능

}

->dll 파일 생성. 

Visual Studio 생성폴더의 Tools/Shortcuts 위치에 운영체제 버전에 맞는 Command Prompt를 실행한다. ex)D:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts

                VS2013 x64 Native Tools Command Prompt

실행 후 C 파일이 생성되어있는 경로로 이동하여 dll파일을 생성해 준다.

(ex: cl -I"C:\Program Files\Java\jdk1.8.0_31\include" -I"C:\Program Files\Java\jdk1.8.0_31\include\win32" -LD HelloWorldLib.c -FeHelloJniClass.dll)

이때, 2번에서 생성한 헤더 파일이 C 파일과 동일한 위치에 있어야 한다.

Posted by 선우아범
,