목차
- 자바 javac 활용 자바 소스 코드 컴파일하여 실행 파일 만들기 이전 포스팅 참고 학습
- 자바 JNI C 함수 호출을 위한 so 라이브러리 컴파일 예제 이전 포스팅 참고 학습
- 자바 JNI 라이브러리 로드 예제 이전 포스팅 참고 학습
- 자바 JNI 정수 입력받아 덧셈 후 반환 하는 C 소스 코드 작성 및 so 빌드 예제
- 자바 JNI 자바에서 so 라이브러리 로드하여 정수 전달하여 덧셈 결과 받아 출력 예제
자바 javac 활용 자바 소스 코드 컴파일하여 실행 파일 만들기 이전 포스팅 참고 학습
이전 포스팅에서는 자바 컴파일러인 javac를 사용하여 자바 소스 코드를 컴파일하고 실행 파일을 만드는 방법을 알아보았습니다. 자바 소스 코드를 컴파일하여 바이트 코드로 변환하고, JVM(Java Virtual Machine)에서 실행할 수 있는 클래스 파일을 생성하는 과정을 설명합니다. javac 를 활용하여 자바 소스 코드 컴파일 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.08.10 - [Linux] - [Linux/Java] 리눅스 우분투에서 java 컴파일 및 실행 예제(javac)
자바 JNI C 함수 호출을 위한 so 라이브러리 컴파일 예제 이전 포스팅 참고 학습
이전 포스팅에서는 자바 네이티브 인터페이스(JNI)를 사용하여 C 언어 함수를 자바에서 호출하기 위해 필요한 C 소스 코드를 컴파일하는 방법을 다룹니다. JNI를 활용하여 C 코드를 컴파일하여 공유 라이브러리(.so 또는 .dll)를 생성합니다. 이러한 so 라이브러리를 자바 소스 코드에서 로드하여 C 함수를 호출할 수 있습니다. 오늘 예제도 so 라이브러리를 사용하여 jni를 호출하기때문에 아직 so 라이브러리 생성 방법을 모르신다면 아래 링크를 참고해주세요.
2023.09.18 - [Java] - [Java/C] 자바에서 C 사용을 위한 JNI 소스코드 컴파일 및 라이브러리 생성 예제(so 라이브러리)
자바 JNI 라이브러리 로드 예제 이전 포스팅 참고 학습
마지막으로 이전 포스팅에서는 자바에서 JNI 라이브러리를 로드하는 방법에 대해 알아보았습니다. 자바에서 C 라이브러리를 로드하여 사용할 수 있도록 설정하는 예제가 포함되어있습니다. 간다한 C 함수를 호출하는 예제가 있기때문에 아직 jni 활용 방법을 잘 모르신다면 아래 링크를 참고해주세요.
2023.09.18 - [Java] - [Java/C] 자바에서 JNI 연동으로 C 라이브러리 불러오기 예제(loadLibrary)
자바 JNI 정수 입력받아 덧셈 후 반환 하는 C 소스 코드 작성 및 so 빌드 예제
아래는 자바에서 로드할 so 라이브러리를 빌드하는 예제입니다. 간단히 정수 2개를 입력받아 덧셈을하여 정수를 반환하는 함수를 포함합니다.
// Adder.c
#include <jni.h>
#include <stdio.h>
JNIEXPORT jint JNICALL Java_com_example_Adder_add(JNIEnv *env, jobject obj, jint num1, jint num2) {
jint result = num1 + num2;
return result;
}
그리고 해당 c 코드를 컴파일하여 so 라이브러리를 생성합니다.
$ gcc -shared -o libadder.so -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" Adder.c
자바 JNI 자바에서 so 라이브러리 로드하여 정수 전달하여 덧셈 결과 받아 출력 예제
아래는 자바에서 미리 빌드한 JNI 공유 라이브러리를 로드하고, 정수 값을 전달하여 C 코드에서 덧셈을 수행하고 결과를 자바로 받아 출력하는 예제입니다.
$ mkdir -p com/example
$ vim Adder.java
package com.example;
public class Adder {
static {
System.loadLibrary("adder"); // library name (without 'lib' prefix and '.so' extension)
}
public native int add(int num1, int num2);
public static void main(String[] args) {
Adder adder = new Adder();
int result = adder.add(5, 7);
System.out.println("Result: " + result);
}
}
$ javac Adder.java
$ cp ./Adder.class com/example/
$ java com.example.Adder