问题现象:

ubuntu22.04 编译Linux内核出现 multiple definition of `yylloc‘ 错误打印

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here collect2: error: ld returned 1 exit status

原因分析

原因是 Ubuntu22.04 提供的gcc编译链版本比较高,CSDN上很多博客提出的解决方法是回退gcc编译链的版本到gcc-9,这样可以解决问题,但我不认为回退到gcc-9是一个好的解决方法。

问题分析

既然是因为升级了ubuntu22.04 gcc编译器的版本,高版本的gcc编译器发现了Linux源码中的问题,哪问题点应该在 Linux源码里面。修复方法应该是修改Linux源码里的文件,Linux官方应该已经注意到这个问题并且给出了修复。

按照这个思路,找到了Linux官方对这个问题的修复补丁,Linux官方社区给的解决方案是给 'scripts/dtc/dtc-lexer.l' 文件打上patch修复。

https://forum.openwrt.org/t/how-to-fix-the-multiple-definition-of-yylloc-problem/136000

https://github.com/torvalds/linux/commit/e33a814e772cdc36436c8c188d8c42d019fda639

为了防止大家登不上github,我把这个补丁的截图下来(补丁很简单,就修复一行代码)

scripts/dtc/dtc-lexer.l 文件进行修改

问题解决:

按照补丁修改 scripts/dtc/dtc-lexer.l 源码之后,问题修复。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐