아래 게시물 중에서 "자바 JNI 예제 - 자동 띄어쓰기 DLL 사용법"을 참조하세요.
(특히, 유니코드 <-> KS 완성형 변환 부분)
아래 내용은 압축파일의 README.TXT에 있는 것임!
Java JNI
1. 형태소 분석기를 사용하기 위한 Java class -- KLT2000JNI.java
작업 폴더 위치 -- C> cd JavaJNI-KLT2000
1.1 패키지를 사용한 것 -- 패키지 위치 src/klt2000/kma
C> javac -d bin src/klt2000/kma/KLT2000JNI.java
C> javah -jni -d DLL_KLT2000JNI\src -classpath bin klt2000.kma.KLT2000JNI
--> klt2000_kma_KLT2000JNI.h 생성
1.2 패키지 사용하지 않는 것 -- src_nopackage/*.java
C> cd src/no_package
C> javac KLT2000JNI.java
C> javah KLT2000JNI
--> 이 실행결과로 KLT2000JNI.h 생성 --> DLL 만들 때 KLT2000JNI.c에서 사용
2. 라이브러리 생성
2.1 윈도용 KLT2000JNI.DLL 생성
DLL_KLT2000JNI/Project에서 Visual Studio를 이용하여 DLL 생성
DLL 생성위치 -- bin/KLT2000JNI.DLL
<참고> bin/KLT2000JNI.DLL을 이미 생성해 놓았으므로 이 작업은 skip해도 됨.
2.2 Unix/Linux용 shared object library
DLL_KLT2000JNI/Makefile을 이용하여 so library 생성
--> ../bin/libKLT2000JNI.so -- 이 파일을 /usr/lib에 설치하여 사용
$ cd DLL_KLT2000JNI
$ make --> ../bin/libKLT2000JNI.so 생성
3. 테스트용 test.java 컴파일 -- src 폴더에서
C> cd src
C> javac -d ../bin test.java
4. 실행 -- bin 폴더에서
C> cd bin
C> java test
<<주의 사항 -- 매우 중요함!!!>>>
1. KLT2000JNI.c 의 아래 함수의 'KLT2000.ini' 파일의 절대경로를 수정해야 함.
(또는 KLT2000JNI-threadsafe.c --> 쓰레드를 사용하는 경우)
JNIEXPORT jint JNICALL Java_klt2000_kma_KLT2000JNI_open_1HAM_1index
(JNIEnv *env, jobject obj)
{
if (open_HAM_index(&mode, NULL, "C:\\Tmp\\test\\hdic\\KLT2000.ini")) {
printf("Initialize error -- open_HAM_index()\n");
return 1;
} else return 0;
}
2. KLT2000.ini의 사전경로 DicDirPath를 사전파일 폴더 'hdic'이 설치된 절대경로로 수정해야 함.
3. Thread-safe해야 하는 경우
KLT2000JNI.c 대신에 KLT2000JNI-threadsafe.c를 사용해야 함
이상입니다.
JavaJNI-KLT2000-TestVersion.zip
첫댓글 mac os에서 해당 내용 빌드하는데 아래와 같이 libindex.a가 없다는 에러가 발생합니다.
libindex.a 올려주실수 있으신지 문의드립니다.
i686-apple-darwin11-llvm-gcc-4.2: ../../KLT210g/libindex.a: No such file or directory
make: *** [../bin/libKLT2000JNI.so] Error 1
댓글이 달린 것을 지금 보았습니다. 세월(?)이 많이 흘렀네요.
mac os용은 어떻게 만들어야 하는지 모르겠네요. mac os에도 C 컴파일러가 있나요?
있으면 어떤 C 컴파일러가 있는지요. gcc?
현재 이 프로그램을 돌려보니 KLT2000JNI.dll: Can't load IA 32-bit.dll on a AMD 64-bit platform이라고 뜨는데 visual 버젼이 달라서 그런건가요 ??