![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: I have a simple Cobol program which gives call to a C program. TO make it more simple no parameters are passed. COMPAQ COBOL compiler is used to compile the HELLO.COB program IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. DATA DIVISION. *! LINKAGE SECTION. *! 01 NUMB PIC 9(9) USAGE IS BINARY VALUE 2. PROCEDURE DIVISION. LABEL1. DISPLAY '--'. CALL "CHECK1". END PROGRAM HELLO5. CHECK1.C is the C porgram. #include <stdio.h> void CHECK1( ); void CHECK1( ) printf ("Hello, this is a C prog called from Cobol prog! \n"); This C porgram is compiled with Compaq C++ compiler cxx, since CC compiler is not present. both programs get compiled. However while linking with command:- LINK HELLO, CHECK1 Following error is generated- %LINK-W-NUDFSYMS, 1 undefined symbol: %LINK-I-UDFSYM, CHECK1 %LINK-W-USEUNDEF, undefined symbol CHECK1 referenced in psect $LINK$ offset %X00000060 in module HELLO file TRY:[TRY2]HELLO.OBJ;6 Kindly let me know a workaround for running the two programs. The Answer is : You need extern "C". Also, you should link with CXXLINK. $ cobol hello $ cc check1 $ link hello,check1 $ run hello -- Hello, this is a C prog called from Cobol prog! $ cxx check1.c $ cxxlink hello,check1 $ run hello -- Hello, this is a C prog called from Cobol prog! $ type hello.cob IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. DATA DIVISION. *! LINKAGE SECTION. *! 01 NUMB PIC 9(9) USAGE IS BINARY VALUE 2. PROCEDURE DIVISION. LABEL1. DISPLAY '--'. CALL "CHECK1". END PROGRAM HELLO. $ type check1.c #include <stdio.h> #ifdef __cplusplus // This to get a C symbol from C++ extern "C" { #endif void CHECK1( ); void CHECK1( ) printf ("Hello, this is a C prog called from Cobol prog! \n"); #ifdef __cplusplus // This to get a C symbol from C++ #endif
|