2016-07-04 1 views
2

JNI를 사용하여 기존 COBOL 응용 프로그램을 호출하려고합니다. COBOL의 응용 구조는 다음과 같습니다.열려있는 cobol dll과 관련된 jni 호출

c-wrapper(main)-->COBOLProgram -> several dyn(.so) and static called modules 

기존 COBOL 응용 프로그램은 여러 정적이라는 서브 프로그램 (COBOL) 및 다양한 동적 (COBOL) 사람을 포함한다.

응용 프로그램의 Jni 호출은 괜찮지 만 COBOL 동적 하위 모듈을 찾아 호출 할 수 없습니다. 다음 JNI (대)

수정 애플리케이션 구조는 :

java class --> libjni.so --> appl.so 

내가 CALL 전에 COB_LIBRARY_PATH 및 LD_LIBRARY_PATH 환경 변수를 검증자는 잘 보인다.

다음과 같은 오류 메시지가 동적 모듈에 들어 있습니다.

libcob: ....<module>.so: undefined symbol: cob_save_call_params 

저는 리눅스에서 64 비트, 1.1.0을 사용합니다. gcc는 cobc 명령의 c 출력을 사용하여 이진 파일을 생성하는 데 사용됩니다.

+0

LD_LIBRARY_PATH는 libcob과 그 파일에 필요한 so-files만을 가리켜 야합니다. COB_LIBRARY_PATH에 모든 COBOL 모듈이 있어야합니다. 어떻게 생겼습니까? 자바 런타임과 libcob 및 응용 프로그램 파일 모두에 동일한 아키텍처 (32/64 비트)를 사용하고 있습니까? 당신이 얻는 정확한 오류는 무엇입니까? OpenCOBOL의 어떤 버전을 사용합니까? –

+0

오류 메시지와 OC 버전을 사용하여 질문을 업데이트했습니다. 호출 후에 예외적으로 사용 했으므로 오류가 표시되지 않았습니다. – cobp

+0

OK, 따라서 문제는 호출 된 모듈이 아니라 libcob 자체의 심볼 중 하나에 있습니다. 'export LD_PRELOAD =/path/to/libcob.so' 명령으로 모듈을 강제로로드 할 수 있습니까? BTW : "linux"는별로 구체적이지 않습니다 .--) 질문 : [질문을 유감스럽게 생각해서] 죄송합니다. [GnuCOBOL 2.0 dev 스냅 샷] (https://sourceforge.net/projects/open-cobol/)에서 이런 일이 발생합니까? files/gnu-cobol/2.0/gnu-cobol-2.0_nightly_r624.tar.gz/download)도 마찬가지입니까? –

답변

1

이 문제는 -lcob 연결 옵션 (gcc 사용시)을 올바르게 지정하면 해결할 수 있습니다. 이진 파일을 만드는 데 사용 된 gcc 명령은 이미이 옵션을 포함하고 있었지만, 실제로 유효하지 않은 대상과 소스 파일 사이에 잘못 삽입되었습니다. JNI 호출없이 dll을 실행하면 어떻게 든 -lcob 옵션이 필요하지 않지만 JNI 호출에서는 -lcob 연결 옵션이 필요합니다.

관련 문제