BitBake:在基本提要中找不到示例

BitBake: example not found in the base feeds

我有一个带有 do_install 任务的 BitBake 配方 (example_0.1.bb),我试图在其中安装 .so 文件:

do_install() {
    install -d ${D}${libdir}
    install -m 0644 ${S}/example.so ${D}${libdir} 
}
FILES_${PN} += "${libdir}/example.so"

这在构建过程中失败并且 returns:

ERROR: example not found in the base feeds   

但是,如果我将测试文件添加到包中,.so 文件和测试文件都会添加到 rootfs。

do_install() {
    install -d ${D}${libdir}
    install -m 0644 ${S}/example.so ${D}${libdir} 
    echo "bar" >> ${TOPDIR}/foo
    install -m 0644 ${TOPDIR}/foo ${D}${libdir} 
}
FILES_${PN} += "${libdir}/libceill.so"
FILES_${PN} += "${libdir}/foo"

如何只添加 .so 文件而不添加垃圾测试文件?

添加行

FILES_SOLIBSDEV = ""

来自 Yocto 邮件列表的解释:

I had FILES_${PN} += “${libdir}/.so” in there and that didn't work. Maybe it was because I was missing the FILES_SOLIBSDEV = “" you mentioned. I'll play with it some more and see what happens. I first started out with FILES_${PN} += “${libdir}/.so” and when that didn't work I tried other things in the FILES_${PN} = line to try and get it picked up. When I couldn't get any of it to work and then saw others (well, at least the link I provided) were seeing the same thing I figured it was time to quit spinning my wheels and consult the big guns :)

呵呵 :) 问题是模式是按照 包变量。第一个包含文件的包获取它,并且 ${PN}-dev 在 ${PN} 之前的 PACKAGES 中。通过清空 FILES_SOLIBSDEV,这将 从 FILES_${PN}-dev 中删除 .so,让 ${PN} 包获取它 相反。

所以你有一个 non-standard 的库,因为它没有安装版本控制的库(libfoo.so.1.2.3,可能是符号链接,例如 libfoo.so.1 - > libfoo.so.1.2.3),然后是编译时的未版本化符号链接 (libfoo.so -> libfoo.so.1)。默认打包规则采用标准库。

发生的情况是,包裹是根据它们在 PACKAGES 中的顺序填充的,其中 PN 之前有 PN-dev。 FILES_PN-dev 默认包含 /usr/lib/lib*.so,而 FILES_PN 包含 /usr/lib/lib*.so.。当您将 /usr/lib/lib.so 添加到 FILES_PN 时,您想要发生的事情并没有发生,因为 PN-dev 已经获取了文件 .

如果您的库根本没有任何开发文件(例如没有 headers),那么您可以设置 FILES_${PN}-dev = "" 来清空该包,然后添加lib*.so 到 FILES_${PN} 将按预期工作。

是的,这是我们应该简化的事情(我一直在考虑为这样的库设计一个小型的 class)并在它发生时在完整性检查中发出警告。

哦,我很惊讶库最终出现在你的第二个例子的图像中,因为例子将包含 /usr/lib/foo 而 example-dev 将包含 /usr/lib/libceill.so.当然,除非您启用了 dev-pkgs,如果您在图像中有示例,它将自动安装 example-dev。

添加行: FILES_${PN}_dev_remove="${FILES_SOLIBDEV} " 它将移出开发路径的包。