Ubuntu 사용 Jni 개발 사례 상세 정보

2101 단어 UbuntuJni 개발
1. 자바 파일을 작성하여 네이티브 방법을 설명하고 static 블록을 통해 동적 링크 라이브러리를 불러옵니다. 예시 Prompt.java 코드는 다음과 같습니다.

class Prompt {
  private native String getLine(String prompt);

  public static void main(String args[]) {
    Prompt p = new Prompt();
    String input = p.getLine("Type a line: ");
    System.out.println("User typed: " + input);
  }

  static {
    System.loadLibrary("Prompt");
  }
}

2.javac 명령을 호출하여 Prompt를 생성합니다.class 파일;
javac Prompt.java
3.javah 명령을 호출하여 Prompt를 생성합니다.C 프로그램에서 참조할 헤더 파일:
javah -jni Prompt
자동으로 생성되는 헤더 파일은 다음과 같습니다.

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Prompt */

#ifndef _Included_Prompt
#define _Included_Prompt
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:   Prompt
 * Method:  getLine
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Prompt_getLine
 (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

4. 프롬프트 작성.c 파일의 구체적인 기능:

#include <jni.h>
#include <stdio.h>
#include "Prompt.h"

JNIEXPORT void JNICALL
Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) 
{
  char buf[128];
  const jbyte *str;
  str = (*env)->GetStringUTFChars(env, prompt, NULL);
  if(str == NULL) {
    return NULL;    
  }
  printf("%s", str);
  (*env)->ReleaseStringUTFChars(env, prompt, str);
  scanf("%s", buf);
  return (*env)->NewStringUTF(env, buf);
}

5. 동적 라이브러리libPrompt를 컴파일합니다.so;
gcc -shared -fpic -I/usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux Prompt.c -o libPrompt.so
6. 실행
java Prompt
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기