我在z / OS USS上使用c ++(cxx)来编译和链接c程序。
我从IEW(链接器)收到错误,它无法访问SYSLIB
。
我假设这必须是出口,例如
export _CXX_LSYSLIB="CEE.SCEELKEDX:CEE.SCEELKED:CBC.SCCNOBJ:SYS1.CSSLIB"
这是我最好的镜头,但在链接过程中仍然出现错误。
ABEND S013-38 OCCURRED WHILE PROCESSING PARTITIONED DATA SET DDNAME SYSLIB.
答案 0 :(得分:1)
我认为你有一个错字。而不是:
_CXX_LSYSLIB="CEE.SCEELKEDX:CEE.SCEELKED:CBC.SCCNOBJ:SYS1.CSSLIB"
我想你想要:
_CXX_LSYSLIB="CEE.SCEELKEX:CEE.SCEELKED:CBC.SCCNOBJ:SYS1.CSSLIB"
这是额外的'D'杀了你。蹩脚的错误消息我同意。
答案 1 :(得分:1)
有一种简单的方法可以正确设置在z / OS上的USS中正确链接应用程序所需的环境变量。以下命令说明了它的工作原理:
> xlC -v a.C
FSUM0000I Utility(xlc) Level(D170323.1712)
exec: export(export,XL_CONFIG=/bin/../usr/lpp/cbclib/xlc/etc/xlc.cfg:xlC,NULL)
exec: /usr/lpp/cbclib/xlc/exe/ccndrvr(/usr/lpp/cbclib/xlc/exe/ccndrvr,./,./a.C,*.C,CXX,CMDOPTS(DEFINE(errno=(*__errno())),NOTEST,-qoe,-qargparse,-qexecops,-qflag=i,-qhalt=16,-qnodebug,-qnolsearch,-qredir,-qlocale=POSIX,-qlongname,-qmaxmem=*,-qmemory,-qnestinc=255,-qnoexpmac,-qnoexportall,-qnogonumber,-qtarget=le,-qnolibansi,-qlist=/dev/fd1,-qnolist,-qnomargins,-qnooffset,-qnosequence,-qnoshowinc,-qsource=/dev/fd1,-qnosource,-qnoxref,-qterminal,-qnooptimize,-qplist=host,-qspill=128,-qstart,-qnoipa,DEFINE(_OPEN_DEFAULT=1),-qdigraph,-qinfo=lan,-qtempinc=tempinc,-qnortti,-qlanglvl=extended:nolibext:nolonglong,-qnoattr,-qinlrpt=/dev/fd1,-qnoinlrpt,-qtmplparse=no,-qansialias),object(./a.o),NOPPONLY,NULL)
exec: export(export,STEPLIB=CBC.SCCNCMP:CEE.SCEERUN2:CEE.SCEERUN,NULL)
exec: export(export,_CXX_ACCEPTABLE_RC=4,NULL)
exec: /bin/cxx(/bin/cxx,-v,a.o,NULL)
exec: export(export,_CXX_ACCEPTABLE_RC=4,NULL)
exec: export(export,_CXX_PVERSION=0x42030000,NULL)
exec: export(export,_CXX_PSYSIX=CEE.SCEELIB(C128N):CBC.SCLBSID(IOSTREAM,COMPLEX),NULL)
exec: export(export,_CXX_PSYSLIB=CEE.SCEEOBJ:CEE.SCEECPP,NULL)
exec: export(export,_CXX_LSYSLIB=CEE.SCEELKEX:CEE.SCEELKED:CBC.SCCNOBJ:SYS1.CSSLIB,NULL)
FSUM0000I Utility(c89) Level(D170323.1712)
//* cxx ------------------------------------------------------------------------
//LINKEDIT EXEC PGM=LINKEDIT,
// PARM='AMODE=31,RMODE=ANY,TERM=YES,
// DYNAM=DLL,ALIASES=NO,UPCASE=NO,
// LIST=OFF,MAP=NO,XREF=NO,INFO=NO,MSGLEVEL=4,
// REUS=RENT,EDIT=YES,AC=0,CALL=YES,CASE=MIXED'
//SYSLIB DD DSN='CEE.SCEELKEX',DISP=SHR,DCB=DSORG=DIR
// DD DSN='CEE.SCEELKED',DISP=SHR,DCB=DSORG=DIR
// DD DSN='CBC.SCCNOBJ',DISP=SHR,DCB=DSORG=DIR
// DD DSN='SYS1.CSSLIB',DISP=SHR,DCB=DSORG=DIR
//C8920 DD UNIT=SYSALLDA,SPACE=(32000,(100,100)),
// STORCLAS=,MGMTCLAS=,DATACLAS=,DSNTYPE=,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//C8961 DD DSN='CEE.SCEEOBJ',DISP=SHR,DCB=DSORG=DIR
//C8962 DD DSN='CEE.SCEECPP',DISP=SHR,DCB=DSORG=DIR
//C8921 DD DSN='CEE.SCEELIB(C128N)',DISP=SHR,DCB=DSORG=NOTDIR
//C8922 DD DSN='CBC.SCLBSID',DISP=SHR,DCB=DSORG=DIR
//SYSPRINT DD PATH='/dev/fd1',
// PATHOPTS=(ORDWR,OCREAT,OAPPEND),FILEDATA=TEXT,
// PATHMODE=(SIROTH,SIRGRP,SIRUSR,SIWOTH,SIWGRP,SIWUSR)
//SYSTERM DD PATH='/dev/fd2',
// PATHOPTS=(ORDWR,OCREAT,OAPPEND),FILEDATA=TEXT,
// PATHMODE=(SIROTH,SIRGRP,SIRUSR,SIWOTH,SIWGRP,SIWUSR)
//SYSLMOD DD PATH='a.out',
// PATHOPTS=(OWRONLY,OCREAT),
// PATHMODE=(SIRWXO,SIRWXG,SIRWXU)
//SYSDEFSD DD DUMMY,
// DCB=(RECFM=F,LRECL=80,BLKSIZE=80)
//SYSLIN DD *
INCLUDE C8920
INCLUDE './a.o'
AUTOCALL C8961
AUTOCALL C8962
INCLUDE C8921
INCLUDE C8922(IOSTREAM)
INCLUDE C8922(COMPLEX)
/*
此命令的输出显示需要导出哪些环境变量以及为每个环境定义了哪些数据集。自然,不需要直接使用c89实用程序,可以通过使用xlc实用程序来实现相同的目的。
在您的情况下,可以将cxx命令替换为xlC -F:cxx或仅替换为xlC,因为xlC命令等效于调用c89实用程序的cxx命令。使用xlc而不是c89实用程序的好处是,您可以使用Shell友好选项,这些选项是通过-q语法而不是-Wc,“ ...”语法指定的。