Yocto:封闭的源库,包含用于库和标头的单独软件包

问题描述

我有自己的.so封闭源代码库并提供头文件。我的.so文件应位于yocto映像内,但头文件应仅在其他项目编译期间使用。

这里是yocto收据:

SUMMARY = "foo library"
LICENSE = "CLOSED"
SECTION = "libs"
SRC_URI = "file://usr/lib/libfoo.so \
           file://usr/include/foo.h "
S = "${workdir}"
inherit autotools pkgconfig
do_compile() {
}
do_install() {
        install -d ${D}/usr/lib
        install -m 0755 ${workdir}/usr/lib/libfoo.so ${D}/usr/lib/libfoo.so.1
        ln -s /usr/lib/libfoo.so.1 ${D}/usr/lib/libfoo.so
        install -d ${D}/usr/include
        install -m 0644 ${workdir}/usr/include/foo.h ${D}/usr/include/
}

FILES_${PN}-dev += "${includedir} "
FILES_${PN} += "/usr/lib/libfoo.so \
        /usr/lib/libfoo.so.1"
PROVIDES += "libfoo"

我希望$ {PN}软件包具有libfoo.so和libfoo.so.1,而$ {PN} -dev软件包只有一个文件。但是yocto bitbake仅复制$ {PN}中的libfoo.so.1,而libfoo.so位于$ {PN} -dev数据包中。

您能帮我如何将文件移至$ {PN}包中吗?

解决方法

此行为是正确的。未版本化的.so文件安装在-dev软件包中,因为系统中的软件包应针对版本文件进行链接。

需要在映像中安装-dev软件包是非常罕见的,因此有效地,只有您的版本化的so文件才能创建它。

如您所见,标头位于-dev包中,因此除非将-dev包显式添加到映像中,否则不会将其添加到映像中。

由于头文件位于includedir中,该文件是用于其他配方(参见SYSROOT_DIRS)的sysroot的目录之一,因此在构建时,其他配方可以使用它。与您的库相同,安装在lib_dir中(也在上述变量中​​)。

因此,当前的行为是预期的。目前尚不清楚为什么还要在主程序包中也要使用非版本的符号链接。

如果出于某种原因这确实是您想要做的,则只需在食谱中添加以下内容:

 SOLIBS = ".so"
 FILES_SOLIBSDEV = ""

c.f。 https://wiki.yoctoproject.org/wiki/TipsAndTricks/Packaging_Prebuilt_Libraries#Non-versioned_Libraries