- 자바 파일의 작성
- .h 파일을 만듦
- javah -classpath ./ -d ./com/indexJNI/header com.indexJNI.IndexJNI
- 패키지화된 클래스를 위해 위와 같이 h 파일을 만든다.
- c 파일 작성
- c 파일 컴파일
- gcc -c -fpic indexjni.c
- indexjni.o 생성
- gcc -shared -o libindexjni.so indexjni.o libindex.a
- libindexjni.so 생성
- java.sun.com에 나와 있는 컴파일 소스
- gcc -o libnativelib.so -shared -Wl,-soname,libnative.so
-I/export/home/jdk1.2/include
-I/export/home/jdk1.2/include/linux nativelib.c
-static -lc - -o libnativelib.so : libnativelib.so파일로 생성된다.
- so파일은 일반적으로 shared object 를 말한다.
- -shared : shared object 를 생성하기 위한 option이다.
- -Wl, : comma뒤에 붙는 옵션을 linker에게 넘겨주기 위한 옵션이다.
- -soname, : 이 옵션은 일단 무시.
- -static : dynamic linking 을 지원하는 시스템에서 shared library가 linking되는 것을 막는다.
- -lc : 이 옵션은 잘 모르겠다.
- 해야 할 일은 so 라이브러리 파일로 컴파일해서 만들고 libindex.a 파일을 같이 링크시키는 일이다.
- 그래서 다음과 같이 해봤다.
- gcc -o libindexjni.so -shared indexjni.c -static -lindex
- ...안된다.ㅜㅜ
- 그래서 일단 컴파일부터 하고 링킹을 하기로 했다.
- gcc -c -fPIC -o libindexjni.o indexjni.c
- 그 다음 링킹
- gcc -shared -o libindexjni.so libindexjni.o libindex.a
- 실행해보기
- Eclipse - project propertys - java build path-libraries-JRE System library - Native library location 에 so파일이 있는 곳을 잡아주고, 실행...되라 제발
- ...이런 제길슨 OTL.....지금 새벽 4시...어쩌라고..
JNI