Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】

make时报缺少flex

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

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第1张图片

命令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

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第2张图片

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

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第3张图片

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

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第4张图片

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

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第5张图片

保存,即可成功make

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第6张图片

make前后多出了哪些文件

make前

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第7张图片

make后

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第8张图片

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

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

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

.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程序。

Archtecture Lab:准备知识3【make时报缺少flex/报错多次定义/.yo和.ys的含义】_第9张图片

你可能感兴趣的:(linux,csapp,汇编,ArchitectureLab)