编译linux内核时multiple definition of `yylloc‘错误的解决方案
·
在编译IMX6ULL时,使用了新版gcc导致编译报错。
错误为multiple definition of `yylloc'
在网络上找了很久也没有找到有效的解决方案(换gcc-9(这种确实可行,但不是我想要的),注释掉yylloc(重复定义错误没了但其他错误出现了)等等)
稍微研究了一下(边改代码边编译,查报错信息),得到了不用换编译器的解决方案,方案如下。

使用vscode或其他编辑器打开内核文件夹下的scripts/dtc,在文件中搜索yylloc,将dtc-lexer.lex.c_shipped文件中的yylloc作为实际变量,其他文件中的yylloc变量定义前均加上extern修饰即可。(其他组合方式可能无效,这里牵扯到变量初始化和调用的问题,我没有去研究源代码,大佬可以研究一下)
然后就可以编译成功。

我也没有想到解决方案会如此简单。(网络上没有这样的解决方案的原因大概就是linux编译时间比较长,没人一遍遍实验而已)
另外,交叉编译linux内核时尽可能使用开发板厂商提供的编译器。我用的正点原子的板子,一开始使用了linaro新款的编译器,报了汇编错误(.err encountered),查了之后才知道是编译工具链的问题。
更多推荐
所有评论(0)