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 !
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.