반응형
자바에서 C 언어 코드를 연동하려면 Java Native Interface (JNI)를 사용해야 합니다. JNI는 자바 코드와 네이티브 코드 (예: C, C++) 간의 상호 작용을 가능하게 합니다. 다음은 JNI를 사용하여 자바와 C 코드를 연동하는 기본적인 과정입니다.
C 코드 작성:
먼저, C로 작성된 네이티브 라이브러리를 만듭니다. 이 코드는 자바에서 호출할 수 있는 네이티브 메소드를 정의합니다.// HelloWorld.c #include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) { printf("Hello from C!\n"); }
자바 클래스 작성:
네이티브 메소드를 선언한 자바 클래스를 작성합니다. 이 클래스에서는 네이티브 메소드가 정의되어 있지 않으며, 대신 네이티브 메소드가 있음을 JNI에 알려줍니다.// HelloWorld.java public class HelloWorld { // 네이티브 메소드 선언 private native void sayHello(); static { // 네이티브 라이브러리 로드 System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().sayHello(); // 네이티브 메소드 호출 } }
헤더 파일 생성:
javac
를 사용하여 자바 파일을 컴파일한 후,javah
도구를 사용하여 네이티브 메소드를 위한 C 헤더 파일을 생성합니다.javac HelloWorld.java javah -jni HelloWorld
이렇게 하면
HelloWorld.h
파일이 생성됩니다.C 코드 컴파일:
C 코드를 컴파일하여 네이티브 라이브러리를 만듭니다. OS에 따라 컴파일 명령이 다릅니다.- Windows:
gcc -shared -o hello.dll -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" HelloWorld.c
- Linux:
gcc -shared -o libhello.so -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" HelloWorld.c
- MacOS:
gcc -shared -o libhello.dylib -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" HelloWorld.c
- Windows:
자바 프로그램 실행:
생성된 네이티브 라이브러리가 자바 프로그램이 실행되는 디렉토리에 있어야 합니다. 자바 프로그램을 실행하여 네이티브 메소드가 제대로 호출되는지 확인합니다.java -Djava.library.path=. HelloWorld
위의 단계들을 수행하면 자바에서 C 코드를 성공적으로 연동하여 사용할 수 있습니다. 이 과정에서 발생할 수 있는 문제는 보통 네이티브 라이브러리를 로드하는 부분이나 JNI 메소드 시그니처와 관련된 부분이므로, 각 단계별로 세부 사항을 주의 깊게 확인하는 것이 중요합니다.
반응형