Ubuntu高版本编译Linux 4.1.x内核报 multiple definition of yylloc 解决方法 Ubuntu 高版本编译 Linux 4.1.x时提示 multiple definition of yylloc 解决方法1. 问题背景在编译 NXP i.MX6ULL 平台 BSP 时使用厂家提供的老版本 Linux 内核linux-imx-rel_imx_4.1.15_2.1.0_ga执行make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j16编译过程中出现错误/usr/bin/x86_64-linux-gnu-ld.bfd: scripts/dtc/dtc-parser.tab.o:(.bss0x50): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here collect2: error: ld returned 1 exit status make[2]: *** [scripts/Makefile.host:100: scripts/dtc/dtc] Error 12. 问题定位从错误可以看到scripts/dtc/dtc-parser.tab.o scripts/dtc/dtc-lexer.lex.o出错位置是scripts/dtc而不是 ARM 内核代码。说明失败的是编译运行在主机上的设备树编译器 dtcLinux 编译过程中会先编译一些 host 工具scripts/ | -- kconfig | -- dtc | -- modpost这些工具运行在 PC 上而不是运行在目标 ARM 板子上。3. 根本原因yylloc来自scripts/dtc/ | -- dtc-lexer.lex.c | -- dtc-parser.tab.c这两个文件分别由flexbison生成。里面都有类似YYLTYPE yylloc;的全局变量定义。老 GCC 行为以前 GCC 默认-fcommon多个同名未初始化全局变量int a;会合并处理。例如a.cint yylloc;b.cint yylloc;链接时正常通过新 GCC 行为GCC 10 开始默认-fno-common同名全局变量会被认为是重复定义multiple definition所以老版本 LinuxLinux 4.1 U-Boot 2016在新 UbuntuUbuntu 20.04 GCC 10环境下容易出现该问题。4. 解决方法方法一增加 -fcommon推荐修改 Linux 顶层 Makefile找到HOSTCC gcc HOSTCXX g HOSTCFLAGS -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -stdgnu89 HOSTCXXFLAGS -O2修改HOSTCC gcc HOSTCXX g HOSTCFLAGS -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -stdgnu89 HOSTCFLAGS -fcommon HOSTCXXFLAGS -O2作用让 host 工具编译时恢复 GCC 老版本行为。方法二编译时临时指定不修改源码make ARCHarm \ CROSS_COMPILEarm-linux-gnueabihf- \ HOSTCFLAGS-fcommon \ -j16如果编译通过再永久修改 Makefile。5. 为什么不是修改 dtc 源码也可以修改scripts/dtc/dtc-lexer.lex.c把YYLTYPE yylloc;改成extern YYLTYPE yylloc;但是不推荐。原因这些文件是自动生成的dtc-lexer.l | flex | v dtc-lexer.lex.c重新编译可能会被覆盖。6. 总结编译老版本 BSP 时例如i.MX6ULLi.MX6Linux 4.xU-Boot 2016如果遇到multiple definition of xxx特别是yylloc通常原因GCC 10 修改了默认全局变量处理规则。解决HOSTCFLAGS -fcommon即可。这个问题本质不是代码错误而是老版本嵌入式 Linux BSP 与新开发环境之间的兼容性问题。

相关新闻

最新新闻

页面置换算法 C 语言实现:6 种算法对比与 20 次访问序列测试

页面置换算法 C 语言实现:6 种算法对比与 20 次访问序列测试

页面置换算法 C 语言实现:6 种算法对比与 20 次访问序列测试当内存空间不足时,操作系统需要选择合适的页面置换算法来管理内存资源。本文将深入探讨六种经典页面置换算法的C语言实现,并通过20次页面访问序列进行量化对比分析。1. 实验环境搭建…

2026/7/12 2:07:26
深入解析Beyond Compare 5授权机制:从RSA原理到实战激活

深入解析Beyond Compare 5授权机制:从RSA原理到实战激活

1. 项目概述:为什么我们需要深入理解Beyond Compare的授权机制作为一名在软件开发领域摸爬滚打了十多年的老程序员,我几乎每天都要和代码、配置文件、日志文件打交道。在这些日常工作中,文件对比工具就像我的左右手,而Beyond Comp…

2026/7/12 2:07:26
1987年4月24日晚上23-24点出生性格、运势和命运

1987年4月24日晚上23-24点出生性格、运势和命运

出生于1987年4月24日晚上23 - 24点这个特定时刻的人,从命理学角度来看,其出生时间跨越了一天的交界,有着独特的命理特征。这一时刻处于子时前后,往往赋予了他们性格上的复杂性与独特性。这类人通常性格细腻且敏锐,有着…

2026/7/12 2:07:26
Krea 2身份保留功能实战:ComfyUI中实现AI角色一致性生成

Krea 2身份保留功能实战:ComfyUI中实现AI角色一致性生成

在实际 AI 图像生成项目中,保持角色身份一致性一直是技术难点。无论是为品牌设计统一风格的角色形象,还是为小说创作连贯的插图,传统文生图模型往往难以在不同生成批次中维持人物的面部特征、服装细节或特定画风。Krea 2 最新推出的身份保留功…

2026/7/12 2:07:26
RAG系统上线前,我如何用三个指标把幻觉率从40%压到5%以下

RAG系统上线前,我如何用三个指标把幻觉率从40%压到5%以下

你辛辛苦苦搭了个RAG系统,文档灌了,向量库建了,接口也通了。问它一个问题,回答看着挺像那么回事——但你怎么知道它说的是对的? 答案是:你不知道。除非你测了。 这篇文章是我自己做RAG测试体系的完整实战…

2026/7/12 2:07:26
遥感技术入门:从电磁波原理到5类传感器选型指南

遥感技术入门:从电磁波原理到5类传感器选型指南

遥感技术入门:从电磁波原理到5类传感器选型指南当无人机掠过农田自动生成作物健康报告,当卫星影像实时追踪全球森林覆盖率变化,这些场景背后都依赖一项关键技术——遥感。不同于普通摄影,遥感通过捕捉人眼不可见的电磁波信息&…

2026/7/12 2:02:25

月新闻