JAVA JNI 원리 상세 소개 및 간단 한 인 스 턴 스 코드

3111 단어 JAVAJNI 원리
JAVA JNI 원리
JNI 는 JAVA 표준 플랫폼 의 중요 한 기능 으로 JAVA 의 플랫폼 과 무관 하 다 는 중대 한 장점 의 부족 을 보완 했다.JAVA 가 크로스 플랫폼 을 실현 하 는 동시에 다른 언어(예 를 들 어 C,C++)의 동적 라 이브 러 리 와 상호작용 을 하여 다른 언어 에 우 위 를 발휘 할 수 있 는 기 회 를 줄 수 있다.
JAVA 표준 플랫폼 의 지원 을 받 아 JNI 모델 을 더욱 쉽게 실현 하고 사용 할 수 있 습 니 다.여기 서 다음 지식 도 를 요약 했다.

실례:
환경 설명:ubuntu 10.4.2 LTS 시스템
프로그램 목록 1:src/com/magc/jni/HelloWorld.java

 /**
  * 
  */
  package com.magc.jni;
 
  /**
  * @author magc
  *
  */
 public class HelloWorld {
   
   static {
     
     System.loadLibrary("Hello");
     
   }
 
   public   native void DisplayHello();
   /**
   * @param args
   */
   public static void main(String[] args) {
 
     new HelloWorld().DisplayHello();
   }
 
 }
src 디 렉 터 리 에 들 어가 이 JAVA 클래스 를 컴 파일 합 니 다.
명령:javac./com/magc/jni/HelloWorld.java
이 Hello World.java 가 있 는 디 렉 터 리 에 Hello World.class 를 생 성 합 니 다.
그리고 자바 로 헤더 파일 을 만 들 고,
명령:javah-jni com.magc.jni.HelloWorld
현재 디 렉 터 리 에 com 생 성magc_jni_HelloWorld.h 헤더 파일 입 니 다.이 파일 은 C,C++프로그램 에서 그 함 수 를 참조 하고 실현 할 수 있 습 니 다.
프로그램 목록 2:commagc_jni_HelloWorld.h

/* DO NOT EDIT THIS FILE - it is machine generated */
 #include <jni.h>
  /* Header for class com_magc_jni_HelloWorld */
 
 #ifndef _Included_com_magc_jni_HelloWorld
 #define _Included_com_magc_jni_HelloWorld
 #ifdef __cplusplus
 extern "C" {
 #endif
 /*
 * Class:   com_magc_jni_HelloWorld
 * Method:  DisplayHello
 * Signature: ()V
 */
 JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
  (JNIEnv *, jobject);
 
 #ifdef __cplusplus
 }
 #endif
 #endif
주:1)이 헤더 파일 은 사용자 가 컴 파일 할 필요 가 없 으 며 다른 C,C+프로그램 에 직접 참조 할 수 있 습 니 다.
     2)、이 헤더 파일 의 자바com_magc_jni_HelloWorld_DisplayHello(JNIEnv*,jobject)방법 은 앞으로 동적 링크 라 이브 러 리 와 상호작용 할 인터페이스 이 며 이름 이 일치 해 야 합 니 다.
 프로그램 목록 3:src/jnihelloworldImpl.cpp

#include <jni.h>
#include "com_magc_jni_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
(JNIEnv *env, jobject obj)
{
  printf("From jni_helloworldImpl.cpp :");
  printf("Hello world ! 
"); return; }
이 C++파일 은 상기 헤더 파일 의 함 수 를 실현 하 였 으 며,주의 방법 함수 이름 은 일치 해 야 합 니 다.
컴 파일 생 성 동적 라 이브 러 리 libHello.so,
명령:g++-shared-I/usr/lib/jvm/java-6-openjdk/include jnihelloworldImpl.cpp -o libHello.so
성공 하면 현재 디 렉 터 리 에 동적 링크 라 이브 러 리 libHello.so 파일 을 생 성 합 니 다.
구체 적 으로 실 현 된 동적 라 이브 러 리 가 있 으 면 JAVA 에서 JNI 프로그램 류 를 호출 하 는 native 방법 을 실행 할 수 있 습 니 다.
명령:java-Djva.library.path=.com.magc.jni.HelloWorld
입력 결과:From jnihelloworldImpl.cpp :Hello world !
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기