As per the documentation in Micro-focus support site, to call a cobol program from a C program we just need to follow the given below steps.
main(int argv, char *argv)
{
cobinit(); /* Initialize COBOL environment */
cobcall("cobep", 0, NULL); /* Call a COBOL program */
cobtidy(); /* Close down COBOL environment */
return(0);
}
Based on this I have come up with a simple C program to call an already working Cobol program, but guess I am getting linking error.
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;
}
Error message receiving
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
If you use MF then you likely have access to a paid support. In any case here's what I can tell you from knowing something about gcc and libraries.
The C compiler compiles fine. It only complains about signedness of a
char *
orconst char *
, but this shouldn't matter. To solve this check in the header for the actual defintion ofcobcall
, I assume changing it to one of these should fix the compiler warning:Side note: as far as I know you don't pass the file extension to
cobcall
, therefore to make it work later you may need to remove the.gnt
part.The errors you get are from the linker as it has no possibility to resolve these mf specific functions. I've skimmed over different MF docs but did not found the library name you need. Maybe it is
libcob
orlibcobmf
orlibmfcob
or ...Edit: I've found a reference in an old MF manual naming the library
libcobol
.As soon as you know the library name use
-lname
(for example-lcobol
/-lcob
/-lcobmf
/-lmfcob
) to let the linker know that it can resolve them in this library. Add-L/path/to/library
to let the linker know where it can find the library.If compilation worked any your main program complains about "cannot find libcob.so" (or libcobmf.so or whatever it is named) set
LD_LIBRARY_PATH
to point to the library name.