| [ CnUnix ] in KIDS 글 쓴 이(By): burp (__) 날 짜 (Date): 2002년 4월 17일 수요일 오후 02시 05분 07초 제 목(Title): [Q] C를 자바에 붙이기 Java 보드에 들르지 않으시는 고수분들의 견해를 듣고자 글을 올립니다. 양해를 ^^;;; openssl 함수를 호출하는 c 프로그램을 JNI를 통해 java 클래스에서 사용하려고 합니다. 시스템이 제공하는 C 함수를 사용하는 간단한 C 프로그램은 JNI를 통해 자바에서 잘 돌아감을 확인하였읍니다. 그런데 openssl의 경우에는 라이브러리 내에 있는 함수를 인식하지 못하고 있는 것 같읍니다. 컴파일에 사용한 옵션은 다음과 같고 컴파일은 에러없이 잘 됩니다. ------------------컴파일 옵션 ---------------------------- OS는 파란 리눅스 (RedHat 7.1) INCLUDE = -I/usr/java/j2sdk1.4.0/include\ -I/usr/java/j2sdk1.4.0/include/linux\ -I/usr/local/ssl/include\ -I/home/myid/openssl-0.9.6b/include/crypto\ LIB = -flibnsl.so -flibdl.so -f/lib/libresolv.so\ -f/usr/local/ssl/lib/libssl.a\ -f/usr/local/ssl/lib/libcrypto.a TARGET = myjavaclass OBJECTS = xxx1.o xxx2.o xxx3.o javac $(TARGET).java javah -jni $(TARGET) gcc $(INCLUDE) -c *.c ld -G $(LIB) $(OBJECTS) -o lib$(TARGET).so -------------------------------------------------------- 자바 클래스를 수행 해보면 ----------------수행 옵션 ------------------------------ java -Djava.library.path=. $(TARGET) -------------------------------------------------------- ASN_GENERALIZEDTIME_check이라는 함수에 대해 undefined symbol이라는 에러를 냅니다. 이 함수는 openssl 소스의 Makefile을 보면 libcrypto.a 에 들어가는 것으로 나타나 있읍니다. 제가 사용하고자하는 C 소스안에서 이 함수를 제거하면 또다른 openssl 함수에서 동일한 에러가 나고요. 결국 libcrypto.a가 lib$(TARGET).so를 만드는데 사용되지 못하는 거 같읍니다. libcrypto.a 대신 libcrypto.so 또는 libcrypto.so.0 또는 libcrypto.so.0.9.6을 사용하면 프르그램 수행시 exception이 발생합니다. JNI 튜토리얼은 so를 사용하라고 예제가 나와있는데 더 안좋은 결과가 나오니 그것도 이상합니다. 뉴스그룹을 돌아다녀도 해를 아직 못구하고 있읍니다. 아시는 분 있으시면 도움 부탁드립니다. ^^<~>^^ |