首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译Y86模拟器(CSAPP)

无法编译Y86模拟器(CSAPP)
EN

Stack Overflow用户
提问于 2020-07-29 19:15:26
回答 1查看 181关注 0票数 0

为了在CSapp book 中进行练习,我在编译Y86模拟器时遇到了问题。变量lineno似乎被定义了多次

下面是错误

代码语言:javascript
复制
 make 
    (cd misc; make all)
    make[1]: Entering directory '/home/platoali/CSapp/sim/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
    /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: yas.o:/home/platoali/CSapp/sim/sim/misc/yas.h:13: multiple definition of `lineno'; yas-grammar.o:(.bss+0x0): first defined here
    collect2: error: ld returned 1 exit status
    make[1]: *** [Makefile:32: yas] Error 1

下面是我找到的声明

代码语言:javascript
复制
 $ grep -R "int lineno" * 
misc/isa.c:    int lineno = 0;
misc/yas.c:int lineno = 1; /* Line number of input file */
misc/yas.c:int lineno;  /* What line number am I processing? */
misc/yas.h:int lineno;
misc/hcl.lex:extern int lineno;
misc/hcl.y:int lineno = 1;
misc/hcl.tab.c:int lineno = 1;
misc/lex.yy.c:extern int lineno;

代码可从以下位置访问:CS:APP3e Student Site

有人能帮我解决这个问题吗?好像lineno声明了很多次,但是我在哪里找不到它?

编辑

代码语言:javascript
复制
    $ grep -R "lineno" * 
misc/isa.c:    int lineno = 0;
misc/isa.c:     lineno++;
misc/isa.c:             fprintf(stderr, "Line %d:%s\n", lineno, buf);
misc/isa.c:                 fprintf(stderr, "Line %d:%s\n", lineno, buf);
misc/yas.c:int lineno = 1; /* Line number of input file */
misc/yas.c:int lineno;  /* What line number am I processing? */
misc/yas.c:    fprintf(out, "Line %d, Byte %d: ", lineno, bytepos);
misc/yas.c:     fprintf(stderr, "Error on line %d: %s\n", lineno, message);
misc/yas.c:             lineno, bytepos, input_line);
misc/yas.c:    lineno = 1;
misc/yas.h:int lineno;
misc/hcl.lex:extern int lineno;
misc/hcl.lex:[\n]                  lineno++;
misc/hcl.lex:"#".*\n               lineno++ ;
misc/hcl.y:int lineno = 1;
misc/hcl.y:  fprintf(stderr, "Error, near line %d: %s\n", lineno, str);
misc/yas-grammar.lex:#{Char}*{Return}*{Newline}      {finish_line(); lineno++;}
misc/yas-grammar.lex:"//"{Char}*{Return}*{Newline}     {finish_line(); lineno++;}
misc/yas-grammar.lex:"/*"{Char}*{Return}*{Newline}   {finish_line(); lineno++;}
misc/yas-grammar.lex:{Blank}*{Return}*{Newline}      {finish_line(); lineno++;}
misc/yas-grammar.lex:<ERR>{Char}*{Newline} {fail("Invalid line"); lineno++; BEGIN 0;}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-15 02:00:10

我也有同样的问题,是关于海合会的。gcc-10将默认值从"-fcommon“更改为"-fno-common”。你需要在Makefiles中添加"-fcommon“标志。例如,

旧的misc/Makefile:

代码语言:javascript
复制
CFLAGS=-Wall -O1 -g
LCFLAGS=-O1

新的misc/Makefile:

代码语言:javascript
复制
CFLAGS=-Wall -O1 -g -fcommon
LCFLAGS=-O1 -fcommon

您可以查看here了解更多详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63152352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档