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 파일과 동일한 위치에 있어야 한다.