목차
- 자바 JNI C 문자열 버퍼 활용 예제 이전 포스팅 참고 학습
- 자바 javac 활용 자바 소스 코드 컴파일 및 예제 실행 이전 포스팅 참고 학습
- 자바 JNI C malloc, free등 활용 메모리 동적할당 예제 이전 포스팅 참고 학습
- 자바 JNI C에서 자바 메소드 호출위한 코드 예제
- 자바 JNI 자바에서 C 함수 호출하여 자바 메소드 호출 예제
자바 JNI C 문자열 버퍼 활용 예제 이전 포스팅 참고 학습
이전 포스팅에서는 JNI를 사용하여 C 코드에서 동적 문자열 버퍼를 생성하고 이를 자바로 전달하는 방법과 예제를 알아보았습니다. 자바에서 C에 버퍼 생성을 요청하여 포인터를 받은뒤, 자바에서 이 포인터에 문자열을 저장하고 저장된 문자열을 C가 가져옵니다. 또한 새로운 문자열이 저장될 때 마다 기존 버퍼 크기보다 클게 예상이되는 경우 realloc으로 버퍼 크기를 조절합니다. 이처럼 자바에서 C 포인터를 활용하는 예제가 궁금하시다면 아래 링크를 참고해주세요.
2023.09.19 - [Java] - [Java/C] 자바 JNI 메모리 동적할당 문자열 저장, 가져오기, 삭제 예제(C 문자열 다루기)
자바 javac 활용 자바 소스 코드 컴파일 및 예제 실행 이전 포스팅 참고 학습
이전 포스팅에서는 자바 소스 코드를 컴파일하고 실행하는 기본적인 단계를 학습하였습니다. javac를 사용하여 자바 코드를 컴파일하고, java로 컴파일된 클래스 파일을 실행합니다. 자바의 모든 예제를 실행해보기 위해서는 자바 소스 코드를 컴파일하여 실행 파일을 얻어야합니다. 따라서 아직 javac 명령으로 자바 소스 코드 컴파일 방법에 대해 잘 모르신다면 아래 링크를 참고하여 학습해주세요.
2023.08.10 - [Linux] - [Linux/Java] 리눅스 우분투에서 java 컴파일 및 실행 예제(javac)
자바 JNI C malloc, free등 활용 메모리 동적할당 예제 이전 포스팅 참고 학습
마지막으로 JNI와 C를 사용하여 동적 메모리 할당 및 해제를 다루는 예제를 이전 포스팅에서 알아보았습니다. C에서 malloc 및 free 함수를 사용하여 메모리를 동적으로 할당 및 해제하는 방법을 배웠습니다. 따라서 자바에서 C의 malloc, free를 사용하는 방법이 궁금하시다면 아래 링크의 포스팅을 참고해주세요.
2023.09.19 - [Java] - [Java/C] 자바 JNI malloc, free 활용 메모리 동적 할당 변수 생성,삭제,값 저장 예제(포인터)
자바 JNI C에서 자바 메소드 호출위한 코드 예제
아래는 JNI를 사용하여 C 코드에서 자바 메소드를 호출하는 방법을 다루는 예제입니다. 아래와 같이 C에서도 자바 메소드를 호출하도록 설정이 가능합니다. 이제 이 코드를 so 라이브러리로 빌드하여 자바에서 호출하도록 하겠습니다.
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_example_MyJavaClass_callCFunction(JNIEnv *env, jobject obj) {
// 자바 메소드 호출
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "javaMethod", "()V");
(*env)->CallVoidMethod(env, obj, mid);
// C 함수 호출
printf("This is a C function called from Java.\n");
}
자바 JNI 자바에서 C 함수 호출하여 자바 메소드 호출 예제
아래는 자바에서 C 함수를 호출하고, C 함수 내에서 자바 메소드를 호출하는 예제입니다.
package com.example;
public class MyJavaClass {
static {
System.loadLibrary("myjniexample"); // 라이브러리 이름
}
public native void callCFunction();
public void javaMethod() {
System.out.println("This is a Java method called from C.");
}
public static void main(String[] args) {
MyJavaClass myObj = new MyJavaClass();
myObj.callCFunction();
}
}