y86模拟器(csapp)安装失败

Failed to install the y86 simulator (csapp)

我正在尝试在 archlinux 上为 Y86 代码编译一个模拟器,这是我的配置。 (对于格式我真的很抱歉。)


GUIMODE=-DHAS_GUI

TKLIBS=-L/usr/lib -ltk -ltcl

TKINC=-isystem /usr/include 

但是当我运行 makefile 时,事情似乎不对:

(cd misc; make all)
make[1]: Entering directory '/home/meijieru/sim/misc'
gcc -Wall -O2 -c yis.c
gcc -Wall -O2 -c isa.c
isa.c: 在函数‘load_mem’中:
isa.c:204:10: 警告:变量‘hexcode’被设定但未被使用 [-Wunused-but-set-variable]
     char hexcode[15];
          ^
isa.c:203:9: 警告:变量‘addr’被设定但未被使用 [-Wunused-but-set-variable]
     int addr = 0;
         ^
isa.c:202:9: 警告:变量‘empty_line’被设定但未被使用 [-Wunused-but-set-variable]
     int empty_line = 1;
         ^
gcc -Wall -O2 yis.o isa.o -o yis
gcc -Wall -O2 -c yas.c
gcc -O2 -c yas-grammar.c
gcc -Wall -O2 yas-grammar.o yas.o isa.o -lfl -o yas
bison -d hcl.y
flex hcl.lex
gcc -O2 node.c lex.yy.c hcl.tab.c outgen.c -o hcl2c
make[1]: Leaving directory '/home/meijieru/sim/misc'
(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib -ltk -ltcl" TKINC="-isystem /usr/include ")
make[1]: Entering directory '/home/meijieru/sim/pipe'
# Building the pipe-std.hcl version of PIPE
../misc/hcl2c -n pipe-std.hcl < pipe-std.hcl > pipe-std.c
gcc -Wall -O2 -isystem /usr/include  -I../misc -DHAS_GUI -o psim psim.c pipe-std.c \
    ../misc/isa.c -L/usr/lib -ltk -ltcl -lm
psim.c: 在函数‘simResetCmd’中:
psim.c:852:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = "No arguments allowed";
        ^
psim.c:860:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = stat_name(STAT_AOK);
           ^
psim.c: 在函数‘simLoadCodeCmd’中:
psim.c:871:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = "One argument required";
        ^
psim.c:877:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = tcl_msg;
        ^
psim.c:884:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = tcl_msg;
           ^
psim.c: 在函数‘simLoadDataCmd’中:
psim.c:894:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = "Not implemented";
           ^
psim.c:900:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = "One argument required";
        ^
psim.c:906:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = tcl_msg;
        ^
psim.c:910:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = tcl_msg;
           ^
psim.c: 在函数‘simRunCmd’中:
psim.c:924:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = "At most one argument allowed";
        ^
psim.c:931:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = tcl_msg;
        ^
psim.c:935:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = stat_name(status);
           ^
psim.c: 在函数‘simModeCmd’中:
psim.c:944:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = "One argument required";
        ^
psim.c:947:11: 错误:‘Tcl_Interp’没有名为‘result’的成员
     interp->result = argv[1];
           ^
psim.c:956:8: 错误:‘Tcl_Interp’没有名为‘result’的成员
  interp->result = tcl_msg;
        ^
psim.c: 在函数‘signal_register_update’中:
psim.c:993:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘create_memory_display’中:
psim.c:1004:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c:1019:60: 错误:‘Tcl_Interp’没有名为‘result’的成员
      fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                            ^
psim.c: 在函数‘set_memory’中:
psim.c:1054:60: 错误:‘Tcl_Interp’没有名为‘result’的成员
      fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                            ^
psim.c: 在函数‘show_cc’中:
psim.c:1068:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘show_stat’中:
psim.c:1080:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘show_cpi’中:
psim.c:1095:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘signal_sources’中:
psim.c:1109:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘signal_register_clear’中:
psim.c:1119:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘report_line’中:
psim.c:1133:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘report_pc’中:
psim.c:1189:56: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "Error Message was '%s'\n", sim_interp->result);
                                                        ^
psim.c: 在函数‘report_state’中:
psim.c:1203:58: 错误:‘Tcl_Interp’没有名为‘result’的成员
  fprintf(stderr, "\tError Message was '%s'\n", sim_interp->result);
                                                          ^
Makefile:42: recipe for target 'psim' failed
make[1]: *** [psim] Error 1
make[1]: Leaving directory '/home/meijieru/sim/pipe'
Makefile:26: recipe for target 'all' failed
make: *** [all] Error 2

对这个问题有什么见解吗?

类型 Tcl_Interp 没有名为 result 的成员。

在使用 tcl 支持构建时将 -DUSE_INTERP_RESULT 添加到 CPPFLAGS

如果有人遇到这个问题,在 sim/Makefile 中,只需注释掉这些行:

GUIMODE=-DHAS_GUI
TKLIBS=-L/usr/lib -ltk -ltcl
TKINC=-isystem /usr/include/tcl8.5

并在sim/pipe/Makefile和sim/seq/Makefile中重复上述操作

希望这对本实验有所帮助并祝您玩得开心:)