ubuntu22.04 编译Linux内核出现 multiple definition of `yylloc‘ 问题解决

最近升级到了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

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
编译Linux内核需要按照以下步骤进行操作: 1. 首先,确保你的系统已经安装了必要的软件包和工具。可以运行以下命令来安装所需的软件包: ``` sudo apt update sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev ``` 2. 下载Linux内核源代码。你可以从Linux官方网站上下载最新版本的内核源代码,也可以使用Git仓库进行克隆。以下是使用Git克隆的示例命令: ``` git clone https://github.com/torvalds/linux.git ``` 3. 进入内核源代码目录: ``` cd linux ``` 4. 配置内核编译选项。可以使用以下命令打开配置界面: ``` make menuconfig ``` 在配置界面中,你可以选择需要的内核选项和功能,然后保存退出。 5. 开始编译内核。运行以下命令开始编译: ``` make -j$(nproc) ``` 这将使用所有可用的处理器核心并行编译内核。 6. 安装编译完成的内核。运行以下命令将编译好的内核安装到系统中: ``` sudo make modules_install sudo make install ``` 7. 更新引导加载程序配置。根据你使用的引导加载程序不同,运行相应的命令更新引导配置。例如,对于Grub引导加载程序,运行以下命令: ``` sudo update-grub ``` 8. 重新启动系统。完成以上步骤后,重新启动系统以使用新编译内核。 请注意,编译内核可能需要一定的时间和计算资源。在进行编译之前,请确保你有足够的空闲时间和系统资源。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值