我有一个带有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
文件?
答案 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}” 它将移出开发路径包。