无法从源代码构建y86-64模拟器

时间:2018-10-20 07:39:23

标签: linux y86

我正在尝试在Linux上编译用于Y86-64代码的模拟器。我已经重写了makefile,但结果如下所示。它说:“'matherr'的未定义引用”。(看起来当它与gcc连接时,链接)

(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5 ")
    make[1]: 进入目录“/home/gongchen/桌面/ICS/archlab-handout/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 -I/usr/include/tcl8.5  -I../misc -DHAS_GUI -o psim psim.c pipe-std.c \
        ../misc/isa.c -L/usr/lib/ -ltk8.5 -ltcl8.5 -lm
    /tmp/cchKTZy7.o:(.data.rel+0x0):对‘matherr’未定义的引用
    collect2: error: ld returned 1 exit status
    Makefile:42: recipe for target 'psim' failed
    make[1]: *** [psim] Error 1
    make[1]: 离开目录“/home/gongchen/桌面/ICS/archlab-handout/sim/pipe”
    Makefile:28: recipe for target 'all' failed
    make: *** [all] Error 2

2 个答案:

答案 0 :(得分:3)

gcc -Wall -O2 -I/usr/include/tcl8.5  -I../misc -DHAS_GUI -o psim psim.c pipe-std.c \
    ../misc/isa.c -L/usr/lib/ -ltk8.5 -ltcl8.5 -lm
/tmp/cchKTZy7.o:(.data.rel+0x0):对‘matherr’未定义的引用

您正在链接并获得到matherr的未定义参考错误。

matherr似乎是SV​​ID数学库的一部分。根据{{​​3}},该符号在Glibc 2.27或更高版本中不再存在。

  

描述

     

注意:此页面中描述的机制不再受以下支持   glibc。在glibc 2.27之前,它已被标记为过时。以来   glibc 2.27,该机制已完全删除。新   应用程序应使用math_error(7)和   fenv(3)。此页面记录了matherr()机制以帮助   维护和移植较旧的应用程序。

matherr(3) man page说,您应该执行以下操作检查错误:

  1. errno设置为零
  2. 致电feclearexcept(FE_ALL_EXCEPT);

数学计算完成后,您应检查以下非零值以指示错误:

  1. errno
  2. fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW);

由于您是试图使用该程序的人(而不是维护者),所以我建议采取两种行动。该策略是在可以正常工作的地方使用发行版,然后向Y86维护人员进行修复。

首先,使用提供Glibc 2.26或更早版本的其他较旧发行版。像Debian 8(Glibc 2.19)或Fedora 25(Glibc 2.24)之类的东西就可以了。

第二,针对Y86项目提交错误报告。 Y86维护人员需要解决此问题,而不是试图学习课程材料的学生。

答案 1 :(得分:1)

我的同学有一种解决此问题的方法:注释与matherr相关的代码,例如图片中的代码。并且GUI模式有效。好厉害! enter image description here