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

Linux 无法从源代码构建y86-64模拟器,linux,y86,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”) 制作[1]:进入目录“/家/公辰/桌面/ICS/archlab讲义/sim/pipe“ #构建管道-std.hcl版本

我正在尝试为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”)
制作[1]:进入目录“/家/公辰/桌面/ICS/archlab讲义/sim/pipe“
#构建管道-std.hcl版本的管道
../misc/hcl2c-n管道-std.hclpipe-std.c
gcc-墙壁-O2-I/usr/include/tcl8.5-I../misc-DHAS_GUI-o psim psim.c管道-std.c\
../misc/isa.c-L/usr/lib/-ltk8.5-ltcl8.5-lm
/tmp/cchKTZy7.o:(.data.rel+0x0):对‘马瑟尔未定义的引用
collect2:错误:ld返回了1个退出状态
Makefile:42:目标“psim”的配方失败
生成[1]:***[psim]错误1
制作[1]:离开目录“/家/公辰/桌面/ICS/archlab讲义/sim/pipe“
Makefile:28:目标“全部”的配方失败
make:**[全部]错误2
您正在将未定义的引用错误链接到
matherr

看起来
matherr
是SVID数学库的一部分。根据Glibc 2.27或更高版本,符号不再存在

说明

注意:不再支持本页中描述的机制 格里伯。在Glibc2.27之前,它被标记为过时。自从 glibc 2.27,该机制已完全移除。新的 应用程序应使用数学错误(7)和 fenv(3)。此页记录matherr()机制,以帮助 维护和移植较旧的应用程序

指示您应执行以下操作以检查错误:

  • errno
    设置为零
  • 调用feclearException(FE_ALL_Exception) 数学计算完成后,应检查以下非零值以指示错误:

  • errno
  • fetestexcept(FE_无效| FE_除以零| FE_溢出| FE_下溢)
  • 因为你是一个试图使用这个程序的人(而不是维护者),我建议你采取两种行动。策略是使用一个可以正常工作的发行版,并将其交给Y86维护人员进行修复

    首先,使用另一个提供Glibc 2.26或早期版本的较旧发行版。像Debian 8(Glibc 2.19)或Fedora 25(Glibc 2.24)这样的东西应该很好

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

    您正在将未定义的引用错误链接到
    matherr

    看起来
    matherr
    是SVID数学库的一部分。根据Glibc 2.27或更高版本,符号不再存在

    说明

    注意:不再支持本页中描述的机制 格里伯。在Glibc2.27之前,它被标记为过时。自从 glibc 2.27,该机制已完全移除。新的 应用程序应使用数学错误(7)和 fenv(3)。此页记录matherr()机制,以帮助 维护和移植较旧的应用程序

    指示您应执行以下操作以检查错误:

  • errno
    设置为零
  • 调用feclearException(FE_ALL_Exception) 数学计算完成后,应检查以下非零值以指示错误:

  • errno
  • fetestexcept(FE_无效| FE_除以零| FE_溢出| FE_下溢)
  • 因为你是一个试图使用这个程序的人(而不是维护者),我建议你采取两种行动。策略是使用一个可以正常工作的发行版,并将其交给Y86维护人员进行修复

    首先,使用另一个提供Glibc 2.26或早期版本的较旧发行版。像Debian 8(Glibc 2.19)或Fedora 25(Glibc 2.24)这样的东西应该很好


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

    我的同学有办法解决这个问题:注释与matherr相关的代码,如图中的代码。GUI模式也可以工作。好厉害!

    我的同学有一个解决这个问题的方法:注释与matherr相关的代码,如图中的代码。GUI模式也可以工作。好厉害!

    重复的@My_Lulu-我想Tripleee找到了根本原因。这是2002年的一个古董项目,可能已经废弃。看起来Y86项目有几个分支。也许你可以试试另一把叉子。GitHub上的fork似乎没有引用
    matherr
    符号。
    libm。因此
    不再有这些符号,只需注释掉与@My_Lulu的matherrDuplicate相关的代码-我认为Tripleee找到了根本原因。这是2002年的一个古董项目,可能已经废弃。看起来Y86项目有几个分支。也许你可以试试另一把叉子。GitHub上的fork似乎没有引用
    matherr
    符号。
    libm。因此
    不再有这些符号,只需注释掉与matherr相关的代码即可
    (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
    
    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’未定义的引用