Search code examples
yocto

Yocto recipe to install shared libraries dependency issues


I have a Yocto recipe that compiles dynamically linked shared libraries that should be added to the rootfs. Compiling and adding them to rootfs works fine, but QA packaging warnings are resulted.

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"

The warning is the following:

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]

The commented RDEPENDS_${PN} = "libB${SOLIBS}" doesn't do anything in any way I tried so far.

How can I solve this problem? I don't want to add INSANE_SKIP_${PN} += "file-rdeps", I want to resolve the dependency problem.


Solution

  • Just guessing but isn't your recipe installing lib{A,B,C}.so.1.0.0 and they actually need libX.so (objdump -x /usr/lib/libC.so.1.0.0, what's in NEEDED)? In which case, they probably should depend on libX.so.1.0.0 instead, so fix your Makefile/CMakeLists. I've never seen nor used oe_libinstall before, could you just use install relative/path/to/libA.so.1.0.0 ${D}${libdir} instead? Maybe that's oe_libinstall doing this weird trick?

    Also, you probably don't need your manually crafted do_compile, it's already what the basic do_compile does for you (calling make if there's a Makefile available).