2016-12-20 14 views
3

마이크로 포커스 지원 사이트의 설명서에 따라 C 프로그램에서 cobol 프로그램을 호출하려면 아래 단계를 따라야합니다. MicroFocus cobol 명령 cobinit, cobcall 및 cobtidy가 C 프로그램에서 오류를 던지고 있습니다.

main(int argv, char *argv) 
{ 

cobinit();    /* Initialize COBOL environment */ 

cobcall("cobep", 0, NULL); /* Call a COBOL program */ 

cobtidy();    /* Close down COBOL environment */ 

return(0); 

} 

내가 이미 작동중인 코볼 프로그램을 호출하는 간단한 C 프로그램과 함께 올라와있다이를 바탕으로,하지만 난 오류를 연결 얻고 같아요. 내 코드 및 오류 메시지를 찾으십시오.
C Program 
################# 
cat call.c 

#include<stdio.h> 
#include "cobcall.h" 
#include "cobmain.h" 

int main() 
{ 

int ret=0; 
cobinit(); 
ret=cobcall("cobolprogram.gnt",1,NULL); 
cobtidy(); 

return 0; 
} 

`

##########################

gcc -Wall call.c -o call 
call.c: In function 'main': 
call.c:10: warning: pointer targets in passing argument 1 of 'cobcall' differ in signedness 
/usr/ccs/bin/ld: Unsatisfied symbols: 
cobtidy (first referenced in /tmp/ccQBPw6r.o) (code) 
cobcall (first referenced in /tmp/ccQBPw6r.o) (code) 
cobinit (first referenced in /tmp/ccQBPw6r.o) (code) 
collect2: ld returned 1 exit status 

내가 새로운 오전 수신 오류 메시지 C와 Cobol 프로그래밍, 이것이 매우 어리석은 질문이라면 저를 용서해주십시오.

감사 & 감사합니다, Jibi

답변

3

당신이 MF를 사용하는 경우 다음 가능성이 유료 지원에 액세스 할 수 있습니다. 어쨌든 여기서 gcc와 라이브러리에 대해 알 수 없다.

C 컴파일러가 정상적으로 컴파일됩니다. char * 또는 const char *의 서명 여부에 대해서만 불평하지만 이는 중요하지 않습니다.

ret=cobcall((char *)"cobolprogram.gnt",1,NULL); 
ret=cobcall((const char *)"cobolprogram.gnt",1,NULL); 
ret=cobcall((unsigned char *)"cobolprogram.gnt",1,NULL); 
ret=cobcall((const unsigned char *)"cobolprogram.gnt",1,NULL); 

사이드 참고 : 지금까지 내가 당신을 통과하지 알고 이 cobcall의 실제 (고화질)의 헤더에서이 검사를 해결하기 위해, 나는 컴파일러 경고를 수정해야 이들 중 하나로 변경 맡기 파일 확장자를 cobcall으로 변경하면 나중에 작동하게하려면 .gnt 부분을 제거해야 할 수 있습니다.

오류는 이러한 특수 기능을 해결할 가능성이 없으므로 링커에서 발생합니다. 다른 MF 문서를 건너 뛰었지만 필요한 라이브러리 이름을 찾지 못했습니다. 아마 libcob 또는 libcobmf 또는 libmfcob 또는 ...

편집은 다음과 같습니다 나는 도서관 libcobol 명명 오래된 MF 설명서에 대한 참조를 발견했습니다.

은 즉시 당신이 알고있는 라이브러리 이름은 링커가이 라이브러리를 해결할 수 있음을 알려 -lname (예를 -lcobol/-lcob/-lcobmf/-lmfcob에 대한)를 사용합니다. -L/path/to/library을 추가하면 링커에서 라이브러리를 찾을 수있는 위치를 알 수 있습니다.

주 프로그램에서 "libcob.so를 찾을 수 없습니다"(또는 libcobmf.so 또는 그 이름이 무엇이든)에 불평하면 LD_LIBRARY_PATH이 라이브러리 이름을 가리 키도록 설정하십시오.

+0

시몬에게 감사드립니다. –

+0

@ JibiMakkar 해답을 해결책으로 표시해 주셔서 감사합니다. 나는 그것을 더 좋게하고 싶다 : 당신이 사용해야만했던 도서관 이름은 무엇인가? BTW : C (gcc)와 COBOL 둘 다 시작하면 MF를 명시 적으로 필요로하지 않는다면 GnuCOBOL을 살펴볼 것을 강력하게 제안합니다. –

+1

먼저 다음과 같이 cobol 프로그램을 컴파일했습니다. cob -zv "cobolprogram".cbl - 공유 라이브러리를 생성하고 아래 주어진대로 C 프로그램을 컴파일합니다. cob -xvo "name"-CC -I $ CODDIR/include "program".c 사실, 라이브러리를 찾을 수 없습니다. 네가 내 시스템에서 언급 했어. 귀하의 대답에 그때 발견 된 개암 나무 도서관, 그것은 올바른 방향으로 나를 인도한다. 아직도 나는 어디에 cobinit, cobcall과 cobtidy에 대한 도서관 extacly 확실하지 않습니다. 나는 "개떡"명령이 그것을 처리한다고 믿습니다. 의견을 보내주십시오. –