You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译多模块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文件定义逻辑名

  1. 在TACL中执行DEFINE命令,将逻辑名util映射到你的util源文件实际路径:

    DEFINE util <你的util源文件完整路径>
    

    例如,若util文件路径为$MYVOL.MYUSER.TALUTIL,则执行:

    DEFINE util $MYVOL.MYUSER.TALUTIL
    
  2. 先编译util文件生成目标文件:

    TAL util /OUTPUT util_obj
    
  3. 修改主文件中的引用语句,从源文件引用改为目标文件引用:
    将主文件中的?NOLIST, SOURCE =util(term_write_int)替换为:

    ?NOLIST, OBJECT =util_obj(term_write_int)
    
  4. 编译主文件并绑定生成可执行程序:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:50:03