如何解决Yocto中添加预编译库时出现的ldflags错误
解决Yocto Recipe复制预编译库时的GNU_HASH QA错误
你的问题核心在于变量赋值被覆盖,导致你添加的ldflags跳过检查没有正确生效,另外还有一些细节需要调整,我帮你梳理一下:
问题根源
你在recipe里连续写了两行INSANE_SKIP_${PN}赋值:
INSANE_SKIP_${PN} = "dev-elf" INSANE_SKIP_${PN} = "ldflags"
Yocto的变量赋值是覆盖式的,第二行直接把第一行的dev-elf给替换掉了——相当于最后只有ldflags的跳过设置生效,之前的dev-elf被丢弃,这不仅可能引发其他潜在QA问题,也会让你的ldflags跳过逻辑没有完全按预期工作。
修复方案
把需要跳过的QA检查项合并到同一行,用空格分隔,这样两个检查规则都会被正确应用:
修改后的完整sample.bb如下:
DESCRIPTION = "Adding binaries" LICENSE = "CLOSED" SRC_URI = "file://*" S = "${WORKDIR}" do_install(){ install -d ${D}${libdir} cp ${S}/libnfc_nci_linux.so* ${D}${libdir} } # 合并跳过的QA检查项,避免变量覆盖 INSANE_SKIP_${PN} = "dev-elf ldflags" FILES_${PN} += "${libdir}/libnfc_nci_linux.so*"
额外说明
- 对于闭源预编译库来说,跳过
ldflags(也就是GNU_HASH检查)是合理的,因为很多厂商提供的二进制可能没有添加这个段,但要确保你的库是针对目标硬件架构编译的,避免运行时兼容性问题。 FILES_${PN}的配置是正确的,它确保了库文件会被打包到rootfs里,如果你的库包含开发用的符号链接(比如libnfc_nci_linux.so指向libnfc_nci_linux.so.x.y.z),也不需要额外配置FILES_${PN}-dev,直接放在${PN}里即可(闭源库一般不需要单独拆分开发包)。
内容的提问来源于stack exchange,提问作者user9570291
相关产品推荐
相关产品推荐

