报错:linux内核多个yylloc定义multiple definition of `yylloc‘; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0):

linux内核多个yylloc定义冲突问题

在学习设备树的时候,编译linux内核出现了这个报错信息
在这里插入图片描述

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [scripts/Makefile.host:100:scripts/dtc/dtc] 错误 1
make[1]: *** [scripts/Makefile.build:403:scripts/dtc] 错误 2
make[1]: *** 正在等待未完成的任务....
  HOSTLD  scripts/genksyms/genksyms
  HOSTLD  scripts/mod/modpost
make: *** [Makefile:555:scripts] 错误 2
make: *** 正在等待未完成的任务....

然后我找到了定义yylloc的两个文件
scripts/dtc/dtc-lexer.lex.c
scripts/dtc/dtc-parser.tab.c
于是我开始对其中一个文件进行修改,我在dtc-lexer.lex.c对yylloc进行了修改
在这里插入图片描述

把YYLTYPE yylloc;改为了extern YYLTYPE yylloc;
在这里插入图片描述

但是编译后依旧报错
在这里插入图片描述

而且文件内容也改回了YYLTYPE yylloc;

原因是因为dtc-lexer.lex.c和dtc-parser.tab.c是自动生成的
在这里插入图片描述

那既然如此,那我就去顶层MakeFile查找有没有什么关于dtc-lexer.lex.c的规则,然后被我找到了这条语句:
在这里插入图片描述

# generated files need to be cleaned explicitly
clean-files	:= dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h

这条规则的作用是 make 在清理时需要删除 dtc-lexer.lex.c、dtc-parser.tab.c 和 dtc-parser.tab.h 这三个自动生成的文件。删掉dtc-lexer.lex.c,让它不要清理这个文件。
在这里插入图片描述

clean-files	:=dtc-parser.tab.c dtc-parser.tab.h

然后把dtc-lexer.lex.c修改回extern YYLTYPE yylloc;
在这里插入图片描述

编译
在这里插入图片描述

在这里插入图片描述

编译通过
以上就是我在这个报错的解决方法,希望对大家有所帮助

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值