JNI 기술 기초 (1) - 제로 부터 JNI 코드 를 작성 합 니 다.

자바 프로그램의 가장 큰 특징 은 바로 크로스 플랫폼 의 특성 입 니 다. 작 성 된 상부 응용 프로그램 은 어떠한 수정 도 하지 않 고 다른 플랫폼 에서 실 행 될 수 있 습 니 다. 그러나 자바 자체 에 도 이러한 단점 이 존재 합 니 다. 그것 은 성능 이 상대 적 으로 떨 어 지고 성능 에 대한 요구 가 높 은 상황 에서 자바 프로그램 은 힘 에 부 치 는 경우 가 많 습 니 다.이 결함 을 보완 하기 위해 자바 는 JNI 라 는 인터페이스 기술 을 제공 했다. 자바 프로그램 은 JNI 를 통 해 C / C + + 의 라 이브 러 리 를 호출 할 수 있다. 이것 은 성능 에 대한 요구 가 비교적 높 은 자바 프로그램 에 있어 서 복음 임 에 틀림없다.
       JNI (Java nativeinterface) 는 자바 네 이 티 브 인터페이스 로 번역 할 수 있 으 며, 자바 코드 가 C / C + 코드 를 호출 할 수 있 도록 하 는 메커니즘 입 니 다.JNI 의 강력 한 특성 으로 인해 우 리 는 JAVA 플랫폼 을 사용 하 는 동시에 원래 의 로 컬 코드 도 다시 사용 할 수 있 습 니 다.가상 머 신 구현 의 일부로 서 JNI 는 JAVA 와 로 컬 코드 간 의 양 방향 상호작용 을 허용 합 니 다.
       하지만 JNI 를 사용 하 는 데 도 대가 가 있다 는 점 을 분명히 해 야 한다.자바 프로그램 은 자바 가상 머 신 JVM 위 에서 실행 되 기 때문에 플랫폼 과 무관 하 게 할 수 있다 는 것 을 잘 알 고 있 습 니 다.그러나 자바 프로그램 이 JNI 를 통 해 네 이 티 브 코드 (예 를 들 어 c / c + + 등) 를 호출 하면 자바 프로그램 은 플랫폼 의 무관 성 을 잃 게 된다.최소한 네 이 티 브 코드 부분 을 다시 컴 파일 해 야 합 니 다.따라서 JNI 를 사용 하려 면 어 쩔 수 없 이 잘 따 져 야 합 니 다. JNI 를 선택 하지 마 십시오. 예 를 들 어 TCP / IP 가 프로 세 스 간 통신 을 하 는 등 대체 방안 을 선택 할 수 있 습 니 다.구 글 의 안 드 로 이 드 플랫폼 밑바닥 이 JNI 로 이 뤄 졌 지만 개발 자 들 이 JNI 로 안 드 로 이 드 위의 애플 리 케 이 션 을 개발 하 는 것 을 권장 하지 않 는 이유 다.JNI 를 사용 하면 안 드 로 이 드 위의 애플 리 케 이 션 플랫폼 과 무관 성 을 상실 하기 때문이다.
       점진 적 인 학습 을 위해 본 고 는 표준 자바 플랫폼 을 바탕 으로 하 는 JNI 코드 의 작성 만 논의 하고 JNI 의 첫 접촉 자 에 게 가장 간단 한 JNI 코드 를 신속하게 작성 하여 JNI 개발 절 차 를 체험 하도록 가 르 칩 니 다.
       JNI 기술 을 어떻게 사용 하 는 지 저 와 함께 차근차근 배 워 보 겠 습 니 다.
       JNI 를 연구 하 는 가장 좋 은 방법 은 예 에서 시작 하 는 것 이 라 고 생각 합 니 다. 널리 알려 진 Hello World 부터 시작 하 세 요.
       다음은 JNI 로 전형 적 인 'Hello World' 프로그램 을 실현 하 겠 습 니 다. 이 프로그램 은 자바 에서 JNI 호출 c 함수 로 'Hello World' 의 출력 을 실현 합 니 다.
이 프로그램 을 만 드 는 것 은 다음 단계 로 나 뉜 다.
    ①. 자바 프로그램 (HelloWorld. 자바) 을 만 들 고 원생 의 c / c + 함 수 를 정의 합 니 다.
    ②. HelloWorld. java 를 javac 로 컴 파일 하여 HelloWorld. class 생 성
    ③. javah 테이프 - jni 매개 변수 로 Hello World. class 를 컴 파일 하여 Hello World. h 파일 을 만 듭 니 다. 이 파일 은 c 의 함수 원형 을 정의 합 니 다.c 함 수 를 실현 할 때 필요 합 니 다.     ... 하려 하 다
    ④. HelloWorld. c 를 만 들 고 HelloWorld. h 정 의 를 실현 하 는 함수
    ⑤. HelloWorld. c 를 컴 파일 하여 libHelloWorld. so 생 성
    ⑥. 자바 가상 컴퓨터 에서 자바 프로그램 HelloWorld 실행
1. 자바 소스 파일 HelloWorld. java 만 들 기
    public class HelloWorld{
        private native void print();
        public static void main(String[] args){
            new HelloWorld().print();
        }
        static {
            System.loadLibrary("HelloWorld");
        }
    }

위의 코드 에 대해 간단 한 설명 을 합 니 다.
  ①. private native void print () 문 구 는 함수 의 성명 일 뿐 함수 의 실현 은 자바 코드 에 있 지 않 습 니 다. 키워드 native 는 컴 파일 러 에 게 이 방법 이 실제로 실현 되 었 음 을 알려 줍 니 다. 우 리 는 이 키 워드 를 사용 하여 방법 을 설명 한 다음 에 이 방법 을 현지에서 C / C + 등 언어 로 실현 하고 특정한 형식 으로 동적 라 이브 러 리 로 컴 파일 하여 자바 프로그램 이 호출 할 수 있 습 니 다.
  ②. 로 컬 에서 실 현 된 함수 가 동적 라 이브 러 리 로 컴 파일 된 후 자바 프로그램 은 어떻게 식별 하고 불 러 옵 니까?뒤의 static 코드 세그먼트 는 바로 이 기능 을 실현 하 는 것 입 니 다. 그 중의 Hello World 는 바로 동적 라 이브 러 리 의 이름 입 니 다. 동적 라 이브 러 리 의 로드 규칙 에 따라 우리 가 컴 파일 한 동적 라 이브 러 리 의 전체 이름 은 libHello World. so 여야 합 니 다.(계속)

좋은 웹페이지 즐겨찾기