BitBake包装奇特

时间:2016-01-29 17:38:42

标签: package yocto dynamic-library bitbake openembedded

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

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

在构建过程中失败并返回:

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文件?

3 个答案:

答案 0 :(得分:5)

所以你有一个非标准的库,因为它没有安装版本化的库(libfoo.so.1.2.3,也许是符号链接,如libfoo.so.1 - > libfoo.so.1.2.3),然后是编译时的无版本符号链接(libfoo.so - > libfoo.so.1)。默认打包规则假定使用标准库。

正在发生的事情是包裹是由他们在PACKAGES中的订单填充的,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 已经获取了文件

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

是的,这是我们应该更容易做的事情(我一直在考虑像这样的图书馆的小班级),并在发生时进行健全性检查。

哦,我感到惊讶的是,库在第二个示例中最终出现在图像中,例如将包含/ usr / lib / foo,example-dev将包含/usr/lib/libceill.so。当然,除非您启用了dev-pkgs,否则如果您在图像中有示例,则会自动安装example-dev。

答案 1 :(得分:1)

添加行

FILES_SOLIBSDEV = ""

Yocto邮件列表中的解释:

  

我有FILES _ $ {PN} + =“$ {libdir} / .so”在那里,但没有用。   也许是因为我错过了你提到的FILES_SOLIBSDEV =“”。   我会更多地玩它,看看会发生什么。我第一次开始   文件_ $ {PN} + =“$ {libdir} / .so”当这不起作用我尝试了其他   FILES _ $ {PN} =行中的东西试图让它被拾取。当我   无法让任何一个工作,然后看到其他人(好吧,至少链接   我提供了看到同样的事情,我认为是时候退出了   旋转我的车轮并咨询大枪:)

嘿:)问题在于,模式按照顺序匹配 PACKAGES变量。包含文件的第一个包获取它,和 $ {PN} -dev在$ {PN}之前包含在PACKAGES中。通过清空FILES_SOLIBSDEV,那就是了 从FILES _ $ {PN} -dev中删除.so,让$ {PN}包获取它 代替。

答案 2 :(得分:0)

添加以下行: 文件_ $ {PN} _dev_remove =“$ {FILES_SOLIBDEV}” 它将移出开发路径包。