JNI

리눅스에서 동적라이브러리 활용을 위한 JNI 사용_동적라이브러리파일(.a) 포함해서 컴파일 하기

나야 2007. 1. 27. 13:38
일반적으로 다른 라이브러리 파일을 사용하지 않는 native code를 컴파일 할 때는
다음과 같이 해주면 됩니다.

gcc -m32 -shared -o libIndexJNI.so IndexJNI.c -static -lc
native code를 사용하는 class에서 호출하는 라이브러리 이름이 IndexJNI입니다.
즉 System.loadLibrary("IndexJNI"), 이런 식으로 native library를 호출하게 됩니다.
-m32  : 제가 gcc 사용이 미숙한 관계로 각 옵션에 대한 자세한 설명은 드릴 수 없습니다.
          64bit 관련해서 에러가 발생할 경우, 이 옵션을 통해서 32bit로 에뮬레이션해서
          컴파일 해줍니다. 정확히는 링킹 옵션인가요?
-shared : JNI는 동적 라이브러리 파일을 사용해야 하므로 이 옵션은 필혀 들어가야 합니다.

gcc -m32 -shared -c IndexJNI.c -static
gcc -m32 -shared -o libIndexJNI.so -static -lc
위와 같이 object파일 만들고, 동적라이브러리 파일을 만들어도 됩니다.

이제 다른 동적라이브러리 파일(ex libindexjni.a)를 사용하는 라이브러리를 만들때는
일단 컴파일
gcc -m32 -shared -c IndexJNI.c -static
다음 링킹
gcc -m32 -shared -o libIndexJNI.so IndexJNI.o liindexjni.a -static -lc

끝~^^