태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

JNI 시작하기 (Java와 C/C++의 연동)

개발 노트 2008. 9. 5. 16:49 posted by 무병장수권력자


작성자 : 김문규
최초 작성일 : 2008. 9. 5

JNI는 Java 클래스에서 C 라이브러리를 호출하는 기술입니다.

구현 방법은 다음과 같습니다.

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 가 생성됩니다. 이 파일은 구현해야 할 함수가 선언되어 있습니다.
클래스패스 선언에 유의합니다. (간단하게는 같은 폴더에 놓고 -classpath . 하면 됩니다.)


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

#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~!");  // 원하는 기능
}
컴파일 하시면 Hello_DLL.dll 이 생성됩니다.
비줠 스튜디오에서 output 파일 이름을 맞추는 설정을 하시고 프로젝트 include 폴더에 (JDK_HOME)/include/win32를 추가합니다.


4. 실행
> java HelloJniClass
(역시나 클래스패스 설정에 유의하시길 바랍니다.)
Hello Jni~!

5. 완벽한 가이드 문서


  1. Commented by at 2011.02.10 18:56

    우왕
    감사합니다 JINI를 어떻게 시작해야할지 고민이었는데 ~
    잘 설명해 주셨네요~
    천천히 따라서 실행해보았는데 C용 헤더파일을 생성하는 과정에서
    자꾸 오류가나네요 ㅠ
    패스설정도 잘한것같은데 ㅠㅠ
    can not access HelloJniClass
    class file for HelloJniClass not found
    이렇게 오류가나네요ㅠㅠ왜이럴까요 ㅠㅠ