【问题标题】:Yocto recipe to install shared libraries dependency issues安装共享库依赖问题的 Yocto 配方
【发布时间】:2020-07-30 01:45:55
【问题描述】:

我有一个 Yocto 配方,它编译应该添加到 rootfs 的动态链接共享库。编译并将它们添加到 rootfs 可以正常工作,但会导致 QA 打包警告。

S = "${WORKDIR}/git"

do_compile () {
    make
}

do_install () {
    install -m 0755 -d ${D}${libdir}
    oe_libinstall -so libA ${D}${libdir}
    oe_libinstall -so libB ${D}${libdir}
    oe_libinstall -so libC ${D}${libdir}
}

INSANE_SKIP_${PN} = "ldflags"
# RDEPENDS_${PN} = "libB${SOLIBS}"
# RPROVIDES_${PN} = "libB${SOLIBS}"

# FILES_${PN} = "${libdir}/lib*${SOLIBS}"
# INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
# INHIBIT_PACKAGE_STRIP = "1"

警告如下:

WARNING: package do_package_qa: QA Issue: /usr/lib/libC.so.1.0.0 contained in package package requires libB.so, but no providers found in RDEPENDS_package? [file-rdeps]

到目前为止,评论的RDEPENDS_${PN} = "libB${SOLIBS}" 没有以任何方式做任何事情。

我该如何解决这个问题?我不想加INSANE_SKIP_${PN} += "file-rdeps",我要解决依赖问题。

【问题讨论】:

    标签: yocto


    【解决方案1】:

    只是猜测,但您的食谱不是安装了lib{A,B,C}.so.1.0.0,他们实际上需要libX.soobjdump -x /usr/lib/libC.so.1.0.0NEEDED 中有什么)?在这种情况下,它们可能应该依赖libX.so.1.0.0,因此请修复您的 Makefile/CMakeLists。 我以前从未见过也没有使用过oe_libinstall,你能用install relative/path/to/libA.so.1.0.0 ${D}${libdir} 代替吗?也许那是oe_libinstall 在做这个奇怪的把戏?

    另外,您可能不需要手动制作的 do_compile,它已经是基本的 do_compile 为您所做的(如果有可用的 Makefile,则调用 make)。

    【讨论】:

    • 感谢您的回复。关于do_compile,还有更多步骤,我只是在问题中删除了它们以获得更简单的视图。关于库,readelf -a libC.so | grep NEEDED 显示:0x00000001 (NEEDED) Shared library: [libB.so] 0x00000001 (NEEDED) Shared library: [libc.so.6] 关于手动安装,我也尝试过,效果相同:install -Dm 0755 ${S}/lib{A,B,C}.so ${D}${libdir}/lib{A,B,C}.so.1.0.0cd ${D}${libdir}ln -sf lib{A,B,C}.so.1.0.0 lib{A,B,C}.so
    • 0x00000001 (NEEDED) Shared library: [libB.so] 那么问题来了?我安装了 libB.so.1.0.0 而它实际上需要 libB.so?
    • 是的,这就是问题所在。此外,从技术上讲,您实际上是在安装重命名的 libB.so。更好地编译已经存在的版本,而不是稍后“修补”。 Yocto 实际上在文件上执行objdump 以确定它们的NEEDED 库,然后用RPROVIDESNEEDED 库自动填充RDEPENDS。如果创建所述包的配方已经在配方的DEPENDS 中,则不会有任何警告,因为 Yocto 认为这是一个安全且合理的默认设置。如果不是,您将收到一条警告,告诉您在 RDEPENDS 中缺少一个包。
    • 非常感谢您的帮助。我通过修改 Makefile 将版本和 SONAME 添加到库中解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2016-12-13
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2013-01-31
    • 2020-09-29
    相关资源
    最近更新 更多