Application Delivery Management
Application Modernization & Connectivity
CyberRes
IT Operations Management
error undefined symbol _mFsoload
This simple example demonstrates how well Visual COBOL can integrate with PYTHON.
It covers the core subjects of COBOL and C build, BASIC PYTHON scripting and execution.
Here is the output
/home/tonyt/test/tmp >. ./doit.sh COBDIR set to /home/products/vcdevhub22upd2preGA cob64 -C nolist -Zv helloworld.c program1.cbl helloworld.c: program1.cbl: * Micro Focus COBOL V2.2 revision 002 Compiler * Copyright (C) Micro Focus 1984-2014. All rights reserved. * Accepted - verbose * Accepted - nolist * Compiling program1.cbl * Total Messages: 0 * Data: 320 Code: 78 * Micro Focus COBOL Code Generator * Copyright (C) Micro Focus 1984-2014. All rights reserved. * Accepted - verbose * Accepted - pic * Generating program1 * Data: 88 Code: 544 Literals: 32 LD_LIBRARY_PATH </home/products/vcdevhub22upd2preGA/lib> LD_PRELOAD </home/products/vcdevhub22upd2preGA/lib/libcobcrtn64.so:/home/products/vcdevhub22upd2preGA/lib/libcobrts64.so:/home/products/vcdevhub22upd2preGA/lib/libcobmisc64.so:/home/products/vcdevhub22upd2preGA/lib/libcobscreen64.so:/home/products/vcdevhub22upd2preGA/lib/libcobtrace64.so> sys.path < ['/home/tonyt/test/tmp', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gst-0.10', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib64/python2.6/site-packages/webkit-1.0', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'] > before c call Started Hello World program 1 has started after c call
At the end of the output it shows Python calls, C then C calls COBOL, returning back to PYTHON.
The doit.sh script below shows displays from PYTHON, C and COBOL.
Here is the doit.sh
# # set cobol environment # unset LD_LIBRARY_PATH . /home/products/vcdevhub22upd2preGA/bin/cobsetenv COBMODE=64 export COBMODE # # create c program # cat >helloworld.c <<EOF /* Hello World program */ #include<stdio.h> main() { cobinit(); printf("Started Hello World\n"); program1(); cobtidy(); } EOF # # create cobol program # cat >program1.cbl <<EOF program-id. program1 as "program1". environment division. configuration section. data division. working-storage section. 01 in_data pic x(10) value "prog1 data". procedure division. display "program 1 has started" * call "Program2" using in_data. goback. end program program1. EOF # # build the .so file # cob -Zv helloworld.c program1.cbl # # create python script # cat >mytest.py <<EOF import ctypes import sys, os print print "LD_LIBRARY_PATH <" os.environ['LD_LIBRARY_PATH'] ">" print "LD_PRELOAD <" os.environ['LD_PRELOAD'] ">" print "sys.path <" print sys.path print ">" print # mylib = ctypes.CDLL("./libhelloworld.so") print "before c call" mylib.main() print "after c call" exit() EOF # # run the python file # # get these modules loaded # export LD_PRELOAD=$COBDIR/lib/libcobcrtn64.so:$COBDIR/lib/libcobrts64.so:$COBDIR/lib/libcobmisc64.so:$COBDIR/lib/libcobscreen64.so:$COBDIR/lib/libcobtrace64.so # # run the python script # python mytest.py # # remove the LD_PRELOAD # unset LD_PRELOAD # # end #
Create a tmp directory as in ouput above,
Enter the doit.sh code into a doit.sh script in the tmp directory,
Change the cobsetenv comand to point at your COBDIR and,
Execute the doit.sh to get it to work.
The key is the LD_PRELOAD for a simple c calling COBOL library