【已解决】编译Linux内核报错multiple definition of yylloc

问题描述

在学习正点原子的驱动开发指南过程中,在编译Linux内核时出现以下报错,内核文件为:linux-imx-rel_imx_4.1.15_2.1.0_ga。

./mx6ull_alientek_emmc.sh文件内容如下

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

 报错信息如下:

In file included from include/linux/kernel.h:11,
                 from include/asm-generic/bug.h:13,
                 from ./arch/arm/include/asm/bug.h:61,
                 from include/linux/bug.h:4,
                 from include/linux/page-flags.h:9,
                 from kernel/bounds.c:9:
include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes]
   22 | int ____ilog2_NaN(void);
      | ^~~
  CHK     include/generated/bounds.h
  UPD     include/generated/bounds.h
  CC      arch/arm/kernel/asm-offsets.s
In file included from include/linux/kernel.h:11,
                 from include/linux/sched.h:17,
                 from arch/arm/kernel/asm-offsets.c:14:
include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes]
   22 | int ____ilog2_NaN(void);
      | ^~~
  CHK     include/generated/asm-offsets.h
  UPD     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  HOSTLD  scripts/dtc/dtc
/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:556:scripts] 错误 2
make: *** 正在等待未完成的任务....
txj@txj-virtual-machine:~/IMX6ULL/linux_core/linux-imx-rel_imx_4.1.15_2.1.0_ga$

解决方案

需要gcc设置为gcc-9的版本,笔者原先是gcc-12版本无法正常编译。

安装gcc指令

sudo apt install gcc-9

 更新 update-alternatives 配置

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 30

 选择默认版本

sudo update-alternatives --config gcc

如果还不行请尝试以下方法:

重新下载了arm-linux-gnueabihf-gcc

gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar 

通过百度网盘分享的文件:gcc-linaro-4.9.4-2017.01-x86_64_arm...
链接:https://pan.baidu.com/s/1tdF7qalld4E86S3kc9-dAQ?pwd=us5v 
提取码:us5v 
--来自百度网盘超级会员V5的分享

步骤如下:

将文件拷贝到Ubuntu根目录下的tools文件中
sudo mkdir /usr/local/arm
sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
sudo vi /etc/profile
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
sudo apt-get install lsb-core lib32stdc++6
sudo reboot
arm-linux-gnueabihf-gcc -v

 gcc版本为下图,为安装成功。

 这个时候再运行一次./mx6ull_alientek_emmc.sh 应该就能够正常编译了。

如果gcc版本还是原来的,需要先删除先前的arm-linux-gnueabihf-gcc再重新进行上面的步骤。

which arm-linux-gnueabihf-gcc-<version>,找到文件的路径,备份一下,然后删除它即可。

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值