Y86-64模拟器的安装与出现对'matherr'未定义引用问题的解决

 

一. Y86-64模拟器的安装

我是参照这位博主的文章安装的模拟器安装,想安装GUI版本的,到了第五步编译的过程中出现了对'matherr'未定义引用的错误.

二. 解决问题,编译GUI界面

进入sim目录:cd sim

输入make clean; make 

1.编译时出现错误,make后输出的信息如下

(cd misc; make all)
make[1]: 进入目录“/home/dragon/sim/misc”
gcc -Wall -O1 -g -c yis.c
gcc -Wall -O1 -g -c isa.c
gcc -Wall -O1 -g yis.o isa.o -o yis
gcc -Wall -O1 -g -c yas.c
flex yas-grammar.lex
mv lex.yy.c yas-grammar.c
gcc -O1 -c yas-grammar.c
gcc -Wall -O1 -g yas-grammar.o yas.o isa.o -lfl -o yas
bison -d hcl.y
flex hcl.lex
gcc -O1 node.c lex.yy.c hcl.tab.c outgen.c -o hcl2c
make[1]: 离开目录“/home/dragon/sim/misc”
(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5")
make[1]: 进入目录“/home/dragon/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/x86_64-linux-gun/ -ltk8.5 -ltcl8.5 -lm
/tmp/ccuL1R7t.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/dragon/sim/pipe”
Makefile:27: recipe for target 'all' failed
make: *** [all] Error 2

由加粗字段知进入pipe目录并编译psim.c和pipe-std.c时出现了对'matherr'未定义引用的错误

我们进入psim.c,将包含matherr的语句注释掉,总共有两行

2.

继续使用make clean;make

输出信息为

rm -f *~ core
(cd misc; make clean)
make[1]: 进入目录“/home/dragon/sim/misc”
rm -f *.o *.yo *.exe yis yas hcl2c mux4 *~ core.* 
rm -f hcl.tab.c hcl.tab.h lex.yy.c yas-grammar.c
make[1]: 离开目录“/home/dragon/sim/misc”
(cd pipe; make clean)
make[1]: 进入目录“/home/dragon/sim/pipe”
rm -f psim pipe-*.c *.o *.exe *~ 
make[1]: 离开目录“/home/dragon/sim/pipe”
(cd seq; make clean)
make[1]: 进入目录“/home/dragon/sim/seq”
rm -f ssim ssim+ seq*-*.c *.o *~ *.exe *.yo *.ys
make[1]: 离开目录“/home/dragon/sim/seq”
(cd y86-code; make clean)
make[1]: 进入目录“/home/dragon/sim/y86-code”
rm -f *.o *.yis *~ *.yo *.pipe *.seq *.seq+ core
make[1]: 离开目录“/home/dragon/sim/y86-code”
(cd ptest; make clean)
make[1]: 进入目录“/home/dragon/sim/ptest”
rm -f *.o *~ *.yo *.ys
make[1]: 离开目录“/home/dragon/sim/ptest”
(cd misc; make all)
make[1]: 进入目录“/home/dragon/sim/misc”
gcc -Wall -O1 -g -c yis.c
gcc -Wall -O1 -g -c isa.c
gcc -Wall -O1 -g yis.o isa.o -o yis
gcc -Wall -O1 -g -c yas.c
flex yas-grammar.lex
mv lex.yy.c yas-grammar.c
gcc -O1 -c yas-grammar.c
gcc -Wall -O1 -g yas-grammar.o yas.o isa.o -lfl -o yas
bison -d hcl.y
flex hcl.lex
gcc -O1 node.c lex.yy.c hcl.tab.c outgen.c -o hcl2c
make[1]: 离开目录“/home/dragon/sim/misc”
(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5")
make[1]: 进入目录“/home/dragon/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/x86_64-linux-gun/ -ltk8.5 -ltcl8.5 -lm
./gen-driver.pl -n 4 -f ncopy.ys > sdriver.ys
../misc/yas sdriver.ys
./gen-driver.pl -n 63 -f ncopy.ys > ldriver.ys
../misc/yas ldriver.ys
make[1]: 离开目录“/home/dragon/sim/pipe”
(cd seq; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5")
make[1]: 进入目录“/home/dragon/sim/seq”
# Building the seq-std.hcl version of SEQ
../misc/hcl2c -n seq-std.hcl <seq-std.hcl >seq-std.c
gcc -Wall -O2 -I/usr/include/tcl8.5 -I../misc -DHAS_GUI -o ssim \
    seq-std.c ssim.c ../misc/isa.c -L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5 -lm
/tmp/cczSQwXi.o:(.data.rel+0x0):对‘matherr’未定义的引用

collect2: error: ld returned 1 exit status
Makefile:42: recipe for target 'ssim' failed
make[1]: *** [ssim] Error 1
make[1]: 离开目录“/home/dragon/sim/seq”
Makefile:27: recipe for target 'all' failed
make: *** [all] Error 2
 

由以上信息知pipe目录里的内容已经编译完成了,在进入seq目录时出现了编译错误

同第一步的做法,在seq-std.c和ssim.c文件中寻找有matherr 的行,在ssim.c中找到了两行相关信息,注释掉

3.接下来重新编译

make clean; make

输出以下信息

rm -f *~ core
(cd misc; make clean)
make[1]: 进入目录“/home/dragon/sim/misc”
rm -f *.o *.yo *.exe yis yas hcl2c mux4 *~ core.* 
rm -f hcl.tab.c hcl.tab.h lex.yy.c yas-grammar.c
make[1]: 离开目录“/home/dragon/sim/misc”
(cd pipe; make clean)
make[1]: 进入目录“/home/dragon/sim/pipe”
rm -f psim pipe-*.c *.o *.exe *~ 
make[1]: 离开目录“/home/dragon/sim/pipe”
(cd seq; make clean)
make[1]: 进入目录“/home/dragon/sim/seq”
rm -f ssim ssim+ seq*-*.c *.o *~ *.exe *.yo *.ys
make[1]: 离开目录“/home/dragon/sim/seq”
(cd y86-code; make clean)
make[1]: 进入目录“/home/dragon/sim/y86-code”
rm -f *.o *.yis *~ *.yo *.pipe *.seq *.seq+ core
make[1]: 离开目录“/home/dragon/sim/y86-code”
(cd ptest; make clean)
make[1]: 进入目录“/home/dragon/sim/ptest”
rm -f *.o *~ *.yo *.ys
make[1]: 离开目录“/home/dragon/sim/ptest”
(cd misc; make all)
make[1]: 进入目录“/home/dragon/sim/misc”
gcc -Wall -O1 -g -c yis.c
gcc -Wall -O1 -g -c isa.c
gcc -Wall -O1 -g yis.o isa.o -o yis
gcc -Wall -O1 -g -c yas.c
flex yas-grammar.lex
mv lex.yy.c yas-grammar.c
gcc -O1 -c yas-grammar.c
gcc -Wall -O1 -g yas-grammar.o yas.o isa.o -lfl -o yas
bison -d hcl.y
flex hcl.lex
gcc -O1 node.c lex.yy.c hcl.tab.c outgen.c -o hcl2c
make[1]: 离开目录“/home/dragon/sim/misc”
(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5")
make[1]: 进入目录“/home/dragon/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/x86_64-linux-gun/ -ltk8.5 -ltcl8.5 -lm
./gen-driver.pl -n 4 -f ncopy.ys > sdriver.ys
../misc/yas sdriver.ys
./gen-driver.pl -n 63 -f ncopy.ys > ldriver.ys
../misc/yas ldriver.ys
make[1]: 离开目录“/home/dragon/sim/pipe”
(cd seq; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5")
make[1]: 进入目录“/home/dragon/sim/seq”
# Building the seq-std.hcl version of SEQ
../misc/hcl2c -n seq-std.hcl <seq-std.hcl >seq-std.c
gcc -Wall -O2 -I/usr/include/tcl8.5 -I../misc -DHAS_GUI -o ssim \
    seq-std.c ssim.c ../misc/isa.c -L/usr/lib/x86_64-linux-gun/ -ltk8.5 -ltcl8.5 -lm
make[1]: 离开目录“/home/dragon/sim/seq”
(cd y86-code; make all)
make[1]: 进入目录“/home/dragon/sim/y86-code”
../misc/yas abs-asum-cmov.ys
../misc/yas abs-asum-jmp.ys
../misc/yas asum.ys
../misc/yas asumr.ys
../misc/yas asumi.ys
../misc/yas cjr.ys
../misc/yas j-cc.ys
../misc/yas poptest.ys
../misc/yas pushquestion.ys
../misc/yas pushtest.ys
../misc/yas prog1.ys
../misc/yas prog2.ys
../misc/yas prog3.ys
../misc/yas prog4.ys
../misc/yas prog5.ys
../misc/yas prog6.ys
../misc/yas prog7.ys
../misc/yas prog8.ys
../misc/yas prog9.ys
../misc/yas prog10.ys
../misc/yas ret-hazard.ys
make[1]: 离开目录“/home/dragon/sim/y86-code”
 

成功啦!!!

三.检验GUI界面是否安装成功

以psim为例

进入pipe目录: cd pipe

运行图形界面:./psim -t -g ../y86-code/asum.yo

 出现了一个图形界面,错误解决(暂时没有发现注释掉matherr行后的问题,可以正常学习csapp第四章的内容)

猜你喜欢

转载自blog.csdn.net/g_x_l_233/article/details/83957381