Java에서 C 프로그램을 연동해 실행하려고 합니다.
Java에서 C 프로그램을 연동해 실행하려면 JNI가 필요하다고 하던데요. JNI 를 사용하기 위해 어떤 패키지를 받아야 하나요. 현재 fedora17을 사용하고 있습니다. 그리고 javah라는 실행파일은 있고요. 현재 상태에서 다음과 같이 소스를 만들고 컴파일 해봤지만 C의 프로그램이 실행되지 않습니다.
-HelloNative.java-
public class HelloNative {
native public void hello();
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError ex) {}
}
public static void main(String[] args) {
try {
HelloNative my_native=new HelloNative();
my_native.hello();
}
catch(UnsatisfiedLinkError ex) {}
}
}
그리고 다음과 같이 컴파일하고 헤더를 만들었습니다.
java HelloNative.java
javah HelloNative
그리고 다음과 같이 동적으로 실행될 c 파일을 만들었습니다.
#include "HelloNative.h"
//#include
#include
using namespace std;
JNIEXPORT void JNICALL Java_HelloNative_hello(JNIEnv *, jobject) {
//printf("%s","The referenced C code.");
cout<<"The referenced C code"<
return;
}
그리고 다음과 같은 방식으로 목적파일과 동적실행파일을 만들었습니다.
g++ -c -fPIC -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9/include -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9/include/linux HelloNative.c
g++ -shared -o libHelloNative.so HelloNative.o
그리고 마지막으로 다음과 같이 실행
java HelloNative
그러나
The referenced C code
위의 구문이 cout 으로 출력되지 않습니다.
JNI 사용하기
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기