Archtecture Lab:准备知识3【make时各种报错的解决方法】

目录

make时报缺少flex

make时报错多次定义

(Part A) make前后多出了哪些文件

(Part B)make时报“ tk.h 没有那个文件或目录”

解决方案一:不使用tcl/tk

解决方案二:安装tcl/tk

(part C)make时报pc_state, if_id_state, id_ex_state, ex_mem_state, mem_wb_state多次定义

补充: .yo和.ys的含义


make时报缺少flex

报错如下图。其实flex是linux的词法分析器,

命令sudo apt-get install flex即可安装

make时报错多次定义

/usr/bin/ld: yas.o:/home/jrweilinux/download/archlab/sim/misc/yas.h:13: multiple definition of `lineno'; yas-grammar.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

链接器报错,原因是重复定义。把yas.h中的int lineno前面加extern

保存后重新make,又有一个链接的错误:

解决方法:outgen.c中,做出以下修改

保存,即可成功make

(Part A) make前后多出了哪些文件

make前

make后

有用的是两个可执行文件yas和yis。

这两个的用处,先看下README,稍后有使用示例。

YAS	Y86-64 assembler
YIS	Y86-64 instruction level simulator

(Part B)make时报“ tk.h 没有那个文件或目录”

解决方案一:不使用tcl/tk

该错误出现在在Part B中make时

这需要打开该目录下的Makefile文件,注释掉第7、14、20行即可解决。

这样弄有一个问题,即在完成Part B后无法单步调试,报“To run in GUI mode, you must recompile with the HAS_GUI constant defined.”

所以推荐下面这个解决方案。

解决方案二:安装tcl/tk

命令为sudo apt-get install tcl8.6-dev tk8.6-dev tcl8.6 tk8.6,输入密码即可安装。

(网上有人说8.5,但8.5版本太老已经弃用,所以装8.6的即可成功)

然后把下面这个文件的这两行注释掉:

 再次make,虽然有一些个警告,但可以make,也有图形化的调试界面。

(part C)make时报pc_state, if_id_state, id_ex_state, ex_mem_state, mem_wb_state多次定义

makefile前部改为:

sim.h的47行最前边加一个extern:

补充: .yo和.ys的含义

为什么Arch Lab的makefile里会出现.yo和.ys这么奇怪的后缀?

这两个后缀确实是作者自己编的,就像Y86-64语言是他们编的一样。其实.yo和.ys类比的是.o和.s文件。

对于x86-64来说,.c文件通过预处理、编译得到.s文件,.s文件通过汇编器得到.o文件。

类比,对于Y86-64来说,我们在本实验中直接写出.ys文件,.ys文件通过yas得到.yo文件,.yo文件送到yis里执行,可以看到执行结果。

这个yasyis就是我们刚刚make出的可执行文件。

具体用法就是(如下图),copy_block.ys是我写出的Y86-64程序。

 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值