最近升级到了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
make-4.1[3]: *** [scripts/dtc/dtc] Error 1
scripts/Makefile.host:99: recipe for target 'scripts/dtc/dtc' failed
scripts/Makefile.build:544: recipe for target 'scripts/dtc' failed
make-4.1[2]: *** [scripts/dtc] Error 2

在网上查阅解决方案时发现是由于使用gcc 10.0以上版本就会出现该错误,于是我查看了gcc版本,Ubuntu22.04的gcc版本为11.2.0, 于是我打算在ubuntu22.04上使用gcc-9版本

解决方案

  1. 下载gcc-9与g++-9
    sudo apt install gcc-9 g++-9
  2.  将gcc g++版本都切换为9
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100
  3. 再次查看gcc版本,可以看到版本已经变成9.4.0了
  4.  这时候再次编译linux内核就不会出现multiple definition of `yylloc'问题了

参考:GCC编译器的切换

https://jackfrisht.medium.com/ubuntu20-04%E5%A4%9A%E4%B8%AA%E7%89%88%E6%9C%ACgcc%E7%BC%96%E8%AF%91%E5%99%A8%E7%9A%84%E5%88%87%E6%8D%A2-4cc5c5b46fc3

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐