【问题标题】:Yocto: closed source library with separated packages for library and headerYocto:封闭源代码库,带有用于库和头文件的单独包
【发布时间】:2020-09-19 03:05:13
【问题描述】:

我有自己的.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 数据包中。

你能帮我把so文件移动到${PN}包吗?

【问题讨论】:

    标签: embedded-linux yocto bitbake


    【解决方案1】:

    这里的行为是正确的。非版本化的 .so 文件安装在 -dev 包中,因为系统中的包应该链接到版本化文件。

    需要在映像中安装 -dev 包是非常少见的,因此非常有效,只有您的版本化的 so 文件才能实现。

    正如您已经看到的,标头位于 -dev 包中,因此除非将 -dev 包显式添加到图像中,否则不会将其添加到图像中。

    因为您的头文件位于 includedir 中,这是用于其他配方的 sysroot 的目录之一(c.f. SYSROOT_DIRS),它在构建时可供其他配方使用。您的库与安装在 lib_dir 中的库相同(也在上述变量中​​)。

    所以当前的行为是预期的。目前尚不清楚为什么您也希望在主包中包含非版本化符号链接。

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

     SOLIBS = ".so"
     FILES_SOLIBSDEV = ""
    

    参考https://wiki.yoctoproject.org/wiki/TipsAndTricks/Packaging_Prebuilt_Libraries#Non-versioned_Libraries

    【讨论】:

    • 感谢@qschulz 的帮助。我们应该支持以前链接到非版本库的项目的向后兼容性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2018-12-11
    • 2011-02-05
    相关资源
    最近更新 更多