JNI 기술 기초 (1) - 제로 부터 JNI 코드 를 작성 합 니 다.
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 여야 합 니 다.(계속)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.