我很难用Informix编译一个简单的Cobol,它编译,但是它不链接和生成可执行文件
这是我得到的信息:
ld: 0711-317 ERROR: Undefined symbol: .GETENV
ld: 0711-317 ERROR: Undefined symbol: .ECO_DB
ld: 0711-317 ERROR: Undefined symbol: .ECO_SQC
ld: 0711-317 ERROR: Undefined symbol: .ECO_XIM
ld: 0711-317 ERROR: Undefined symbol: .ECO_STM
ld: 0711-317 ERROR: Undefined symbol: .ECO_OC
ld: 0711-317 ERROR: Undefined symbol: .ECO_BOC
ld: 0711-317 ERROR: Undefined symbol: .ECO_SLC
ld: 0711-317 ERROR: Undefined symbol: .ECO_CMT
ld: 0711-317 ERROR: Undefined symbol: .ECO_CDB
ld: 0711-317 ERROR: Undefined symbol: .ECO_DCON
ld: 0711-317 ERROR: Undefined symbol: .ECO_CONN
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: The error code from the last command is 8.我认为这是libpath的一个问题,但这是我的.profile。
export PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:/usr/informix/lib:.
export INFORMIXDIR=/usr/informix
export PATH=$PATH:$INFORMIXDIR/bin
export INFORMIXCOB=cob2
export INFORMIXCOBDIR=/usr/lpp/cobol
export INFORMIXCOBTYPE=ibm
export INFORMIXCOBDIR=/usr/lpp/cobol
export COBDIR=/usr/lpp/cobol
export INFORMIXCOB=cob2
export LIBPATH=$LIBPATH:/usr/informix/lib:/usr/informix/lib/esql:/usr/lpp/cobol/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lpp/cobol/lib:/usr/informix/lib:/usr/informix/lib/esql 我试过几次,但没有结果。
这是我的产品,但我也尝试使用cob2 objet.o来获得相同的结果。
这是makefile
这是我的产品,但我也尝试使用cob2 objet.o来获得相同的结果。
################################################################################
# Licensed Materials - Property of IBM
#
# ? Copyright IBM Corp. 2013
#
# The source code is provided "AS IS" without warranty of any kind. It is
# provided solely as a sample. It may be used, executed, copied, and modified
# for internal use only by Licensee without royalty.
################################################################################
################################################################################
#
# This makefile template can be used to build your AIX COBOL project. Comments
# are provided to help you understand how it works, and to help you edit it for
# your needs. There are 2 main sections:
# 1. Variables Section - defines targets to build, commands to use, and
# command options
# 2. Rules Section - defines how to build the targets. For each target, it
# provides the commands to run to build them.
#
################################################################################
# Add any other file extensions you will build or build from here
.SUFFIXES:
.SUFFIXES: .cbl .eco
################################################################################
# VARIABLES SECTION
#
# Define variables to control various targets, commands, comand options that are
# used in various places in the makefile
################################################################################
## BUILD TARGETS -- Define all targets to build. These are the final targets of
## the build, usually an exectable (linked objects), executables (batch programs),
## or a library (linked objects intended to be linked to by consuming projects).
## You may explicitly list your final target(s) by uncommenting the following
## lines, and commenting the automatic setting of TARGET below
#TARGETS = PROGRAM1 \
# PROGRAM2.exe \
# PROGRAM3
## If your project only contains batch and/or CICS programs and is simple
## enough, you can have the makefile determine the final targets automatically
## by uncommenting this line and changing "*.cbl *.sqb" to the source
## file extensions you use, as well as adding/removing the
## corresponding ' -e sed "s/\.cbl//" ' arguments to 'sed'
TARGETS = `ls -1 *.cbl *.eco 2> /dev/null | sed -e "s/\.cbl//" -e "s/\.eco//"`
## COMPILE COMMAND
## Single-threaded compile
COB = cob2
## COMPILE OPTIONS
## You will want to add your include paths here too (where copybooks are, if not
## in same directory as source), eg. -I/include/path1 -I/include/path2
COB_OPTS = -g
ESQLCOBOL = esqlcobol
## Link/bind options
LINK_OPTS=
## SQL COMPILE SETTINGS -- Uncomment and set the following variables if you use
## embedded SQL in your source
## DB2_DIR: DB2 install location
## DB_NAME: Database name
## DB_USER: DB2 userid
## DB_PASS: DB2 user password
#DB2_DIR = /opt/IBM/db2/V9.7
#DB_NAME =
#DB_USER =
#DB_PASS =
## Compile options for embedded SQL
#DB2_COB_OPTS = -qLIB -q"SQL('database $(DB_NAME) user $(DB_USER) using $(DB_PASS)')"
## DB2 Precompiler
DB2 = db2
DB2_PREP = $(DB2) prep
DB2_PREP_OPTS = target ibmcob
################################################################################
# RULES SECTION
#
# This section controls how targets are built from dependencies.
# The rule will get run if the dependencies change (become newer than the target)
# There are two types of rules:
# 1. Explicit rule. Builds one explicit target from an explicit list of
# dependencies
# <target>: <dependencies>
# <tab> <rules>
# Example:
# PROGRAM.exe: PROGRAM.cbl MYCOPY.cpy
# cob2 PROGRAM.cbl -o PROGRAM.exe -I./
# 2. Implicit rule. Builds targets with a specified file extension from a
# source file with the same basename and with a specified file extension. If
# only the target is specified then it builds a target with no file extension.
# .<target_extension>.<source_extension>:
# <tab> <rules>
# Example 1: For any .o targets that need to be built, if a .cbl file exists
# with the same name
# .cbl.o:
# cob2 $< -o $@
# Example 2: For any executable targets that need to be built with no file
# extension, if a .cbl file exists with the same name
# .cbl:
# cob2 $< -o $@
################################################################################
# 'all' is the default makefile target that is built for 'make' with no arguments
all: $(TARGETS)
## This rule builds batch COBOL source files to an exectuable program with the
## same basename as the source file with no file extension
.cbl:
$(COB) $< -o $@ $(COB_OPTS) $(DB2_COB_OPTS) $(LINK_OPTS)
## prar ficheros informix
.eco:
$(ESQLCOBOL) $< -o $@
## .SQB (EMBEDDED SQL) RULES FOR COMPILER VERSION 4.1.1.10 OR LATER
## Comment these .SQB rules if using compiler version 4.1.1.9 or earlier, and
## uncomment the .SQB rules following for compiler version 4.1.1.9 or earlier.
## This rule builds embedded SQL source in .sqb files.
.sqb:
$(COB) $< -o $@ $(COB_OPTS) $(DB2_COB_OPTS) $(LINK_OPTS)
## .SQB (EMBEDDED SQL) RULES FOR COMPILER VERSION 4.1.1.9 OR EARLIER
## Comment above .SQB rules if using compiler version 4.1.1.9 or earlier, and
## uncomment this rule.
## This rule preprocesses embedded SQL files, to produce .cbl files that will
## be compiled as usual
#.sqb.cbl:
# $(DB2) connect to $(DB_NAME) user $(DB_USER) using $(DB_PASS)
# $(DB2_PREP) $< $(DB2_PREP_OPTS)
## The clean rule gets run when you run 'make clean', which is the default
## Clean Build command for AIX COBOL projects in RD AIX & Linux. It should
## clean up all files created by the build. It is useful if you want to build
## from scratch (eg. if you change a copybook included by many source files).
clean:
rm -f $(TARGETS) core *.lst *.adt *.adt2 cmpout.xml这是预处理后的cobol源。
0001 identification division.
0002 program-id. 'pruifx'.
0003 author. lmfa.
0004 date-written. Junio 2014.
0005
0006 ******************************************************************
0007 * prueba COBOL sql AIX (INFORMIX) *
0008 ******************************************************************
0009
0010 environment division.
0011 configuration section.
0012 special-names.
0013 decimal-point is comma.
0014
0015 input-output section.
0020 data division.
0025 working-storage section.
0026
0053 * exec sql include sqlca end-exec.
*************************************************************
* Title: sqlca.ibm
* Sccsid: @(#)sqlca.ibm 9.1 10/06/96 15:13:54
* Description:
* SQLCA include file for IBM COBOL Set for AIX 1.1
*************************************************************
77 SQLNOTFOUND PIC S9(10) VALUE 100.
01 SQLCA.
05 SQLCODE PIC S9(9) COMPUTATIONAL-5.
05 SQLERRM.
49 SQLERRML PIC S9(4) COMPUTATIONAL-5.
49 SQLERRMC PIC X(70).
05 SQLERRP PIC X(8).
05 SQLERRD OCCURS 6 TIMES
PIC S9(9) COMPUTATIONAL-5.
05 SQLWARN.
10 SQLWARN0 PIC X(1).
10 SQLWARN1 PIC X(1).
10 SQLWARN2 PIC X(1).
10 SQLWARN3 PIC X(1).
10 SQLWARN4 PIC X(1).
10 SQLWARN5 PIC X(1).
10 SQLWARN6 PIC X(1).
10 SQLWARN7 PIC X(1).
0053 * exec sql include tabdes end-exec.
*EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 TABDES.
02 DESCOD PICTURE X(3).
02 DESCLA PICTURE X(15).
02 DESDES PICTURE X(62).
*EXEC SQL END DECLARE SECTION END-EXEC.
0054
0055 ****** Definicion de variables para tablas *******************
0238 * exec sql begin declare section end-exec.
01 base-datos PICTURE x(32).
01 cnt-total PICTURE s9(4) value 200.
01 cnt-totals redefines cnt-total PICTURE s9(4).
01 cnt-pendientes PICTURE 9(4) value 0.
01 sql-area PICTURE x(6) value '119953'.
01 sql-fecha PICTURE x(10) value '23.05,201-'.
01 sql-gm PICTURE xx value 'GM'.
01 sql-rmp PICTURE xxx value 'RMP'.
01 sql-m1 PICTURE x(50) value '*'.
01 sql-m2 PICTURE xx value '*'.
01 sql-m3 PICTURE xxx value '*'.
0254 * exec sql end declare section end-exec.
0056
01 xor1 pic x(40) value '1234567890'.
01 xor2 pic x(40) value '0987654321'.
01 p1 pointer.
01 aa pic 9 value zeros.
01 cc pic 99 value 11.
01 campo pic x(64000).
01 P pointer.
01 ix-base pic x(13) value 'INFORMIX_BASE'.
01 ix-server pic x(14) value 'INFORMIXSERVER'.
*Beginning of ESQL/COBOL temporary variables.
77 SQLCODETMP PIC S9(9) COMP-5.
77 SQLWARNTMP PIC S9(9) COMP-5.
77 SQLSTATE PIC X(5).
77 SQLTYPE PIC S9(9) COMP-5.
77 SQLLEN PIC S9(9) COMP-5.
77 SQLINAME PIC S9(9) COMP-5.
77 SQLITYPE PIC S9(9) COMP-5.
77 SQLILEN PIC S9(9) COMP-5.
77 SQLTEXTLEN PIC S9(9) COMP-5.
77 SQL2TEXTLEN PIC S9(9) COMP-5.
77 SQL3TEXTLEN PIC S9(9) COMP-5.
77 SQLINCNT PIC S9(9) COMP-5.
77 SQLUSEFLAG PIC S9(9) COMP-5.
77 SQLOUTCNT PIC S9(9) COMP-5.
77 SQLDIRECTION PIC S9(9) COMP-5.
77 SQLVALUE PIC S9(9) COMP-5.
77 SQLSCRFLAG PIC S9(9) COMP-5.
77 SQLOBJLEN PIC S9(9) COMP-5.
77 SQLBINDTYPE PIC X(1).
77 SQLDUMLEN PIC S9(9) COMP-5 VALUE 1.
77 SQLOBJECT PIC X(18).
77 SQLTEXT PIC X(18).
77 SQL2TEXT PIC X(18).
77 SQL3TEXT PIC X(18).
77 SQLDUMMY PIC X(1) VALUE ' '.
77 ECO-DSH PIC X(7) VALUE 'eco_dsh'.
77 ECO-USH PIC X(7) VALUE 'eco_ush'.
77 ECO-GST PIC X(7) VALUE 'eco_gst'.
77 ECO-SQC PIC X(7) VALUE 'eco_sqc'.
77 ECO-LYR PIC X(7) VALUE 'eco_lyr'.
77 ECO-MSG PIC X(7) VALUE 'eco_msg'.
77 ECO-SQU PIC X(7) VALUE 'eco_squ'.
77 ECO-IQU PIC X(7) VALUE 'eco_iqu'.
77 ECO-SIG PIC X(7) VALUE 'eco_sig'.
77 ECO-SQS PIC X(7) VALUE 'eco_sqs'.
77 ECO-SQE PIC X(7) VALUE 'eco_sqe'.
77 ECO-SQB PIC X(7) VALUE 'eco_sqb'.
77 ECO-SQBCB PIC X(9) VALUE 'eco_sqbcb'.
77 ECO-SQD PIC X(7) VALUE 'eco_sqd'.
77 ECO-DTS PIC X(7) VALUE 'eco_dts'.
77 ECO-DAI PIC X(7) VALUE 'eco_dai'.
77 ECO-DSI PIC X(7) VALUE 'eco_dsi'.
77 ECO-DTC PIC X(7) VALUE 'eco_dtc'.
77 ECO-DTX PIC X(7) VALUE 'eco_dtx'.
77 ECO-INX PIC X(7) VALUE 'eco_inx'.
77 ECO-FIN PIC X(7) VALUE 'eco_fin'.
77 ECO-FFL PIC X(7) VALUE 'eco_ffl'.
77 ECO-DTCVASC PIC X(11) VALUE 'eco_dtcvasc'.
77 ECO-DTTOASC PIC X(11) VALUE 'eco_dttoasc'.
77 ECO-INCVASC PIC X(11) VALUE 'eco_incvasc'.
77 ECO-INTOASC PIC X(11) VALUE 'eco_intoasc'.
77 ECO-IMN PIC X(7) VALUE 'eco_imn'.
77 ECO-IDN PIC X(7) VALUE 'eco_idn'.
77 ECO-IDI PIC X(7) VALUE 'eco_idi'.
77 ECO-DAT PIC X(7) VALUE 'eco_dat'.
77 ECO-DAY PIC X(7) VALUE 'eco_day'.
77 ECO-DEF PIC X(7) VALUE 'eco_def'.
77 ECO-FMT PIC X(7) VALUE 'eco_fmt'.
77 ECO-JUL PIC X(7) VALUE 'eco_jul'.
77 ECO-MDY PIC X(7) VALUE 'eco_mdy'.
77 ECO-STR PIC X(7) VALUE 'eco_str'.
77 ECO-TDY PIC X(7) VALUE 'eco_tdy'.
*End of ESQL/COBOL temporary variables.
77 SQLTEXT01 PIC X(32) VALUE 'set isolation to committed re
- 'ad '.
77 SQLTEXTLEN01 PIC S9(9) COMP-5 VALUE 32.
77 SQLTEXT02 PIC X(44) VALUE 'select * from tabdes where de
- 'scod = ''UBC'' '.
77 SQLTEXTLEN02 PIC S9(9) COMP-5 VALUE 44.
77 SQLTEXT03 PIC X(44) VALUE 'select * from tabdes where de
- 'scod = ''UBC'' '.
77 SQLTEXTLEN03 PIC S9(9) COMP-5 VALUE 44.
local-storage section.
linkage section.
01 xor-campo pic x(64000).
0111
0231==*=================================================================
0232 procedure division.
0234
0235 Principal section.
Set P to address of ix-base
Call "getenv" using by value P returning base-datos
0497 * display 'INFORMIX_BASE' upon MY-ENV-NAME
0498 * accept base-datos from MY-ENV-VALUE
.
empezar.
move 'xxxxx@xxxxxx' to base-datos
0499 * exec sql database :base-datos end-exec
MOVE 0 TO SQLVALUE
MOVE 32 TO SQLOBJLEN
CALL 'eco_db' USING base-datos, SQLVALUE, SQLOBJLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
0500
0501 if not (sqlcode = zeros or = -377)
0502 display 'OpBD'
0503 go to sql-error
0504 end-if
0505
move 'set lock mode to wait 30' to sql-m1
* exec sql
* execute immediate :sql-m1
* end-exec
MOVE 50 TO SQLTEXTLEN
CALL 'eco_xim' USING sql-m1, SQLTEXTLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
display 'sqlcode->' sqlcode
0509
0511 *-----------------------------------------------------------------
0513 * exec sql
0514 * set isolation to committed read
0515 * end-exec
MOVE 0 TO SQLINCNT
CALL 'eco_stm' USING SQLTEXT01, SQLINCNT, SQLTEXTLEN01
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
.
move spaces to tabdes
* exec sql
* select *
* into :tabdes
* from tabdes
* where descod = 'UBC'
* end-exec
MOVE 0 TO SQLINCNT
MOVE 3 TO SQLOUTCNT
CALL 'eco_oc' USING SQLOUTCNT
MOVE 233 TO SQLTYPE
MOVE 3 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESCOD OF tabdes, SQLLEN
MOVE 15 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESCLA OF tabdes, SQLLEN
MOVE 62 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESDES OF tabdes, SQLLEN
MOVE 0 TO SQLVALUE
CALL 'eco_slc' USING SQLTEXT02, SQLINCNT, SQLOUTCNT, SQLVALU
- E, SQLTEXTLEN02
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
display 'TABDES:' tabdes
.
*---------------------------------------------------------------
* exec sql commit work end-exec
CALL 'eco_cmt'
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* exec sql close database end-exec
CALL 'eco_cdb'
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* exec sql disconnect all end-exec
MOVE 2 TO SQLVALUE
MOVE 0 TO SQL2TEXTLEN
CALL 'eco_dcon' USING SQLVALUE, SQLDUMMY, SQL2TEXTLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* display 'INFORMIXSERVER' upon environment-name
* display 'predesa2' upon environment-value
move 'xxxxxx@xxxxxx' to base-datos
0871 * exec sql
0872 * connect to default with concurrent transaction
0873 * end-exec
MOVE 1 TO SQLVALUE
MOVE 0 TO SQLTEXTLEN
MOVE 0 TO SQL2TEXTLEN
MOVE 0 TO SQL3TEXTLEN
MOVE 0 TO SQLOBJLEN
MOVE 1 TO SQLUSEFLAG
CALL 'eco_conn' USING SQLVALUE, SQLDUMMY, SQLDUMMY, SQLDUMMY
, SQLDUMMY, SQLUSEFLAG, SQLTEXTLEN, SQL2TEXTLEN, SQL3TEXTLEN,
SQLOBJLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
0499 * exec sql database :base-datos end-exec
MOVE 0 TO SQLVALUE
MOVE 32 TO SQLOBJLEN
CALL 'eco_db' USING base-datos, SQLVALUE, SQLOBJLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
0500
0501 if not (sqlcode = zeros or = -377)
0502 display 'OpBD'
0503 go to sql-error
0504 end-if
0505
move 'set lock mode to wait 30' to sql-m1
* exec sql
* execute immediate :sql-m1
* end-exec
MOVE 50 TO SQLTEXTLEN
CALL 'eco_xim' USING sql-m1, SQLTEXTLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
display 'sqlcode->' sqlcode
move spaces to tabdes
* exec sql
* select *
* into :tabdes
* from tabdes
* where descod = 'UBC'
* end-exec
MOVE 0 TO SQLINCNT
MOVE 3 TO SQLOUTCNT
CALL 'eco_oc' USING SQLOUTCNT
MOVE 233 TO SQLTYPE
MOVE 3 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESCOD OF tabdes, SQLLEN
MOVE 15 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESCLA OF tabdes, SQLLEN
MOVE 62 TO SQLLEN
CALL 'eco_boc' USING SQLTYPE, DESDES OF tabdes, SQLLEN
MOVE 0 TO SQLVALUE
CALL 'eco_slc' USING SQLTEXT03, SQLINCNT, SQLOUTCNT, SQLVALU
- E, SQLTEXTLEN03
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
display 'TABDES:' tabdes
* exec sql commit work end-exec
CALL 'eco_cmt'
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* exec sql close database end-exec
CALL 'eco_cdb'
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* exec sql disconnect all end-exec
MOVE 2 TO SQLVALUE
MOVE 0 TO SQL2TEXTLEN
CALL 'eco_dcon' USING SQLVALUE, SQLDUMMY, SQL2TEXTLEN
CALL 'eco_sqc' USING SQLCA, SQLCODETMP, SQLWARNTMP, SQLSTATE
* display 'INFORMIXSERVER' upon environment-name
* display 'desaobr2' upon environment-value
go to empezar.
.
sql-error.
display 'Sqlerror->' sqlcode
stop run
.如能提供任何帮助,将不胜感激。
发布于 2014-09-20 22:41:32
由于AIX编译器的COBOL编译器默认将程序名称折叠为大写,因此如果COBOL源包含对C函数的混合或小写字符调用,则此函数将折叠为大写字符。链接器将找不到程序,并将产生一条错误消息,指示未解决的符号。
您可以使用PGMNAME编译器选项来控制用于AIX编译器的COBOL如何处理名称。默认的是PGMNAME(上),但是您可以使用PGMNAME(混合)按原样处理程序名,而不需要截断、翻译或折叠到大写。当您使用PGMNAME(混合)时,请记住使用程序名称的文字格式,即使程序名称成为文字字符串,例如"programname“,否则您将看到以下消息:
ID 1046-E用户定义的单词在“PGMNAME(混合)”编译器选项下作为“程序ID”名称。
当“PGMNAME(混合)”生效时,需要对“PROGRAM”名称使用文字。该名称以其超感知格式被接受。
此外,在链接时,您需要指定包含以"eco_“开头的例程的Informix库。在您指定的makefile中,没有列出任何Informix库或对象文件。
https://stackoverflow.com/questions/25932819
复制相似问题