【问题标题】:Library built but not part of rootfs库构建但不是 rootfs 的一部分
【发布时间】:2018-09-10 20:15:11
【问题描述】:

我使用 yocto(core-image-minimal) 构建了图像。我需要“libtinfo”库来运行我的应用程序,但它不是 rootfs 的一部分。

我可以看到该库已构建并在“cortexa7hf-neon-poky-linux-gnueabi”文件夹下可用,但它在 rootfs 中不可用。我已使用 IMAGE_INSTALL_append 添加。

我的疑问是,如果 rootfs(core-image-minimal) 不需要该库,则不应构建它。

yocto 为什么要建立那个库? libudev 库也观察到了类似的行为。

【问题讨论】:

    标签: yocto


    【解决方案1】:

    在回答您的问题之前,如果您有一个依赖于“libtinfo”的应用程序并且您的应用程序也是使用 yocto 构建的(例如 sample_app.bb),那么您应该使用

    DEPENDS += "libtinfo"
    RDEPENDS_${PN} += "libtinfo"
    

    这将指示 yocto 将该库包含在 rootfs 中,因为您的应用程序在运行时需要它。

    我的疑问是,如果不需要该库 rootfs(core-image-minimal) 那么它不应该被构建。

    假设你有一个包的源代码,它产生二进制文件和库,例如 kmod 的源代码产生 libkmodmodprobe, insmod, rmmod。在这种情况下,配方的编写方式会生成两个不同的包(基于配置,您可以看到 *.rpm 或 *.ipk)文件,即 kmod_*.ipk/rpmlibkmod2_*.ipk/rpm

    根据您对应用程序的实际需求,您可以在RDEPENDS 中使用kmodlibkmod

    在您的情况下,libtinfo 是在 ncurses 包内构建的,任何包都可能不需要在 rootfs 中。

    yocto 为什么要建立那个库?观察到类似的行为 libudev 库。

    默认情况下,源组件 ncursessystemd 的配方分别包括 libtinfolibudev 的配置 (do_configure)。但它不包含在 rootfs 中,因为在运行时没有任何软件需要它。

    您始终可以使用检查依赖关系图

    bitbake -g <recipe name>
    

    如上所述here

    【讨论】:

    • 这解决了我的问题。我为 NET-SNMP snmpd 编写了一个 .so 代理。缺少 RDEPENDS_${PN} 导致 snmpd 没有安装到 rootfs,即使我的 .so 代理也是如此。多亏了你,它现在可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多