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;
编译
编译通过
以上就是我在这个报错的解决方法,希望对大家有所帮助