我正在尝试在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
答案 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
似乎是SVID数学库的一部分。根据{{3}},该符号在Glibc 2.27或更高版本中不再存在。
描述
注意:此页面中描述的机制不再受以下支持 glibc。在glibc 2.27之前,它已被标记为过时。以来 glibc 2.27,该机制已完全删除。新 应用程序应使用math_error(7)和 fenv(3)。此页面记录了matherr()机制以帮助 维护和移植较旧的应用程序。
matherr(3)
man page说,您应该执行以下操作检查错误:
errno
设置为零feclearexcept(FE_ALL_EXCEPT)
; 数学计算完成后,您应检查以下非零值以指示错误:
errno
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)