如何为Yocto构建中的ninvaders添加-fcommon编译标志
解决Yocto Nanbield构建ninvaders的多定义错误
问题根源
GCC新版本默认启用-fno-common替代了旧版的-fcommon,导致ninvaders源码里的全局变量重复定义触发编译错误。
规范解决方案(仅针对ninvaders包)
以下两种方式都符合Yocto规范,且仅对ninvaders生效:
方法1:通过Yocto变量机制追加标志(推荐)
在ninvaders.inc或ninvaders_0.1.1.bb中添加以下代码:
CFLAGS_append = " -fcommon" # 更精准的包限定写法(避免意外影响其他依赖) # CFLAGS:${PN} += " -fcommon"
利用Yocto的变量覆盖机制,仅为ninvaders包追加编译标志,不会污染全局配置。
方法2:修改编译命令中的CC参数
直接修改ninvaders.inc里的do_compile函数,给CC添加-fcommon:
do_compile() { oe_runmake CC="${CC} -fcommon" }
这种方式直接作用于ninvaders的编译调用,能快速解决问题。
为何local.conf设置无效?
你在local.conf中追加CFLAGS无效,是因为ninvaders的Makefile可能未主动读取CFLAGS变量,配方里的do_compile仅传递了CC变量,导致全局追加的标志没被应用到实际编译流程中。上面两种方法都能确保-fcommon直接作用于ninvaders的编译。
内容的提问来源于stack exchange,提问作者jonathan eslava
相关产品推荐
相关产品推荐

