ubuntu22系统下解决编译Linux内核出现:usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition o

新手在遵循教程编译IMX6ULL源码时遇到yylloc变量冲突,因系统版本升级导致。通过分析发现是由于备份文件覆盖了修改,最终通过修改备份文件并使用extern引用解决了问题。
摘要由CSDN通过智能技术生成

       本人新手小白按照正点原子imx6ull-mini 开发板教程《01.I.MX6ULL用户快速体验V2.6》中4.4节编译出厂源码内核和模块时出现错误:/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.

       因为我用的ubuntu系统22版本高于教程的16.04版本,出现问题在意料之中。

1.问题分析

        根据错误提示,是原文件dtc-parser.tab.c和dtc-lexer.lex.c文档重复定义了yylloc变量,而且首次定义在dtc-lexer文件中。因此打算将dtc-parser.tab.c中定义变量的地方改为引用,即加extern。
2.解决步骤

        1).打开文件  gedit  scripts/dtc/dtc-parser.tab.c  ,搜索找到变量yylloc。

       2). 引用变量。

        3).保存文件,重新编译。
3. 未解决问题,重新分析现象

        根据上面步骤发现问题仍未解决,后来请教了同事大神,经过一番查找偶然发现修改的dtc-parser.tab.c 文件在编译过程中被还原,修改后的部分又被变回原来的。现象如下:

        察看了编译过程发现有一条指令这样的:

        猜测编译过程是有一份备份文件将文件还原,造成修改后的文件被覆盖,查找了文件目录果然发现了备份文件:

        将备份文件中的变量定义改为引用,终于编译通过。

4.总结

        1)出现问题要明确问题的内容再试着解决,不要急。自己解决不了上网查资料和请教身边能力高的人是一个不错的主意,能快速给出解决思路。 
        2)在无计可施时再现一次问题,关注一些过程细节可能会有收获。这次就是本来要放弃了无意中发现文件被覆盖才找到了问题的根本原因。

        3)这种使用备份文件覆盖原文件的提高系统稳定性的方法,可能能运用到以后的项目中。

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值