Bitbake 依赖于 AAA 数据包,它将依赖于 AAA-dev

Bitbake depends AAA packet, it will rdepends AAA-dev

我在一个已经存在的.bb文件中添加依赖包,比如在.bb文件中添加DPENDS="AAA"行,当我编译.bb文件时,它失败了XXX rdepends on AAA-dev [dev-deps],然后我搜索 google,所有答案几乎都是在 .bb 文件中添加行 INSANE_SKIP_${PN} += "dev-deps"RDEPENDS_${PN}_remove = "AAA-dev"

但我的问题是为什么?为什么一个数据包依赖 AAA 数据包,它也应该 RDPENDS AAA-dev,有没有其他答案可以解决这个问题

bb源文件是:

inherit autotools qcommon
DESCRIPTION = "Daemon to handle AT commands"
DEPENDS = "glib-2.0 qmi qmi-framework qmi-client-helper ocean-link"

SRC_DIR = "${WORKSPACE}/atfwd-daemon/"
S = "${WORKDIR}/atfwd-daemon/"

PR = "r3"
EXTRA_OECONF += "--with-glib --with-common-includes=${STAGING_INCDIR}"

do_configure_append() {
    echo "/*This is compiled to generate, only look don't try*/" > ${S}atfwd_config.h
    echo "#ifndef _ATFWD_CONFIG_H_" >> ${S}atfwd_config.h
    echo "#define _ATFWD_CONFIG_H_" >> ${S}atfwd_config.h

#//<!-- ODM feature caogang@2015-07-13
    if [ "${PRJ_NAU8810}" = "NAU8810_CODEC" ]; then
        echo "#define NAU8810_CODEC" >> ${S}atfwd_config.h
    fi

    if [ "${FEATURE_ACDB_ENABLE}" = "true" ]; then
        echo "#define FEATURE_ACDB_ENABLE 1" >> ${S}atfwd_config.h
    fi

    if [ "${PRJ_XXX}" != "" ]; then
        echo "#define  ${PRJ_XXX}" >> ${S}atfwd_config.h
    fi
#//end-->

我在onenet pkg上添加了一个DEPENDS

inherit autotools qcommon
DESCRIPTION = "Daemon to handle AT commands"
DEPENDS = "glib-2.0 qmi qmi-framework qmi-client-helper ocean-link onenet"

SRC_DIR = "${WORKSPACE}/atfwd-daemon/"
S = "${WORKDIR}/atfwd-daemon/"

PR = "r3"
EXTRA_OECONF += "--with-glib --with-common-includes=${STAGING_INCDIR}"

do_configure_append() {
    echo "/*This is compiled to generate, only look don't try*/" > ${S}atfwd_config.h
    echo "#ifndef _ATFWD_CONFIG_H_" >> ${S}atfwd_config.h
    echo "#define _ATFWD_CONFIG_H_" >> ${S}atfwd_config.h

#//<!-- ODM feature caogang@2015-07-13
    if [ "${PRJ_NAU8810}" = "NAU8810_CODEC" ]; then
        echo "#define NAU8810_CODEC" >> ${S}atfwd_config.h
    fi

    if [ "${FEATURE_ACDB_ENABLE}" = "true" ]; then
        echo "#define FEATURE_ACDB_ENABLE 1" >> ${S}atfwd_config.h
    fi

    if [ "${PRJ_XXX}" != "" ]; then
        echo "#define  ${PRJ_XXX}" >> ${S}atfwd_config.h
    fi
#//end-->

onenet.bb是:

inherit pkgconfig cmake
DESCRIPTION = "onenet sdk"
LICENSE = "PD"
PR = "r0"
LIC_FILES_CHKSUM = "file://${WORKDIR}/git/LICENSE;md5=bae84cdd023be37582157d865da54cc6"
SRCREV = "065d98dd8de91544315d6167ce73626ce739666d"
SRC_URI = "git://github.com/cm-heclouds/MQTT.git;protocol=https"
S = "${WORKDIR}/git/mqtt_sdk"

do_install() {
    install -d ${D}/usr/lib
    install -d ${D}/usr/include/onenet

    install -m 0644 ${B}/bin/libmqtt.so -D ${D}/usr/lib/

    for inc in $(find ${S} -name *.h ! -name 'cJSON.h'); do
        install -m 0644 ${inc} -D ${D}/usr/include/onenet
    done
}s

完整性检查文档解释了这一点:

dev-deps: Checks that all packages except -dev or -staticdev packages do not depend on -dev packages, which would be a packaging bug.

它告诉您在您当前的配方中 "XXX" runtime-depends "AAA-dev" 并且这通常是一个错误。您需要先找出 how/why 添加了此依赖项,然后才能确定正确的解决方案。

根据添加的方法:问题似乎是 onenet build 生成了一个未版本控制的“.so”文件。这通常是一个错误(实际的库文件应该是 "libmqtt.so.1.1" 并且未版本化的文件应该只是版本化文件的符号链接)。我很惊讶你在构建 onenet 时没有在这个问题上遇到致命错误。您是否为此抑制了 QA 错误?

既然你已经设法以某种方式构建了 onenet,你现在可能有一个 onenet-dev 包,它错误地包含了实际的库:构建系统在 atfwd-daemon 构建期间注意到这一点,向 onenet-dev 添加了运行时依赖性(因为那是图书馆所在的地方)然后 QA 错误触发,因为正常的包不应该依赖于 -dev 包。

可能的修复:

  • 要么修复 onenet 构建系统,使其生成版本库,要么
  • 强制将.so文件打包到实际的onenet包中,而不是onenet-dev,像这样:

    FILES_${PN}-dev = "${includedir}/"
    FILES_${PN} += "${libdir}/libmqtt.so"
    

一个额外的建议:使用目录变量而不是像 /usr/include 和 /usr/lib 这样的路径(就像我上面做的那样)是一个很好的 "Best Practice".