CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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를 사용하라고 예제가 나와있는데 더 안좋은 결과가 나오니
그것도 이상합니다.

뉴스그룹을 돌아다녀도  해를 아직 못구하고 있읍니다.
아시는 분 있으시면  도움 부탁드립니다.

^^<~>^^
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.