编译多模块TAL程序遇=util逻辑文件报错,该如何解决?
解决TAL编译时「No file system DEFINE exists for this logical file name: =util」错误
我在工作中学习TAL(Transaction Application Language),为熟悉该语言及TACL、Guardian OS环境,编写了多文件示例程序:
util文件代码(含term_write_int函数)
?NOLIST, SOURCE $SYSTEM.SYSTEM.EXTDECS ( ?CLOSE, ?MYTERM, ?OPEN, ?NUMOUT ?WRITE) ?LIST ?section term_write_int ?page "term_write_int" ! ! Write INT to terminal. ! PROC term_write_int(num); INT num; BEGIN INT filenum; INT termname[0:11]; INT length := 11; STRING text[0:10]; CALL NUMOUT (text, num, 10, 11); CALL MYTERM (termname); CALL OPEN (termname, filenum); CALL WRITE (filenum, text, length); CALL CLOSE (filenum); END; !term_write_int
主文件代码(实现两数相加并调用term_write_int)
?NOLIST, SOURCE $SYSTEM.SYSTEM.EXTDECS (INITIALIZER) ?LIST ?NOLIST, SOURCE =util(term_write_int) PROC myproc MAIN; BEGIN CALL INITIALIZER; INT num1 := 4; INT num2 := 7; INT sum; sum := num1 + num2; CALL term_write_int(sum); END; !MYPROC
编译主文件时出现上述错误,解决方法如下:
方法1:为util文件定义逻辑名
在TACL中执行DEFINE命令,将逻辑名
util映射到你的util源文件实际路径:DEFINE util <你的util源文件完整路径>例如,若util文件路径为
$MYVOL.MYUSER.TALUTIL,则执行:DEFINE util $MYVOL.MYUSER.TALUTIL先编译util文件生成目标文件:
TAL util /OUTPUT util_obj修改主文件中的引用语句,从源文件引用改为目标文件引用:
将主文件中的?NOLIST, SOURCE =util(term_write_int)替换为:?NOLIST, OBJECT =util_obj(term_write_int)编译主文件并绑定生成可执行程序:
TAL main /OUTPUT main_obj BIND main_obj, util_obj /OUTPUT my_add_prog
方法2:直接使用util文件的实际路径
无需定义逻辑名,直接在主文件中替换引用语句为util文件的完整路径:
?NOLIST, SOURCE <你的util源文件完整路径>(term_write_int)
例如:
?NOLIST, SOURCE $MYVOL.MYUSER.TALUTIL(term_write_int)
之后按正常流程编译主文件并绑定即可。
内容的提问来源于stack exchange,提问作者Dodande
相关产品推荐
相关产品推荐

