编译 Linux 内核,打印 "multiple definition of `yylloc'" 出错
发表于更新于
字数总计:303阅读时长:1分钟 深圳
LinuxLinux编译 Linux 内核,打印 "multiple definition of `yylloc'" 出错
nixgnauhcuy1 问题描述
1.1 环境
- OS:Arch Linux x86_64
- GCC:12.2.0
- ld:2.39.0
- 编译的内核版本:linux-imx-rel_imx_4.1.15_2.1.0
1 2 3 4 5 6
| ❯ cat /proc/version Linux version 6.0.12-arch1-1 (linux@archlinux) (gcc (GCC) 12.2.0, GNU ld (GNU Binutils) 2.39.0)
❯ uname -m x86_64
|
1.2 错误输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ... CHK include/generated/bounds.h UPD include/generated/bounds.h CC arch/arm/kernel/asm-offsets.s 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: 错误:ld 返回 1 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:555:scripts] 错误 2
|
2 原因
gcc 10 将默认为 -fno-common
,这将导致在链接时出现错误 multiple definition of
yylloc’;`
3 解决方法
使用下述两种方式皆能编译通过。
3.1 方法 1
降级 gcc 版本为 gcc 9
3.2 方法 2
定位到内核目录,使用 vim 编辑 ./scripts/dtc/dtc-lexer.lex.c
,
找到
更改为:
4 参考
- ‘multiple definition of yylloc’ error #4的解决方案
- 补丁