【问题标题】:Dependencies of libraries deployed in a Yocto bin_packageYocto bin_package 中部署的库的依赖关系
【发布时间】:2020-06-19 12:42:32
【问题描述】:

我对使用 Yocto 的库依赖项有一个奇怪的问题。我正在使用完全相同版本的 Linux(Ubuntu 16.04.6 LTS)在两台不同的构建机器 M_a 和 M_b 上构建 Yocto。

libs.tar.bz2 tarball 使用“inherit bin_package”在我的 rootfs 中部署了一些库。食谱就这么简单:

$ cat recipe_0.1.bb
inherit bin_package
S = "${WORKDIR}/prebuilt"
SRC_URI = "file://libs.tar.bz2"
INSANE_SKIP_${PN} += "dev-so"
INSANE_SKIP_${PN} = "ldflags"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"

在 M_a 机器上构建时,包含在 tarball 中的库已正确部署在最终的 rootfs 上。

但是,在 M_b 机器上构建时,出现错误:

ERROR: recipe-0.1-r0 do_package_qa: QA Issue: /usr/lib/libcustom.so contained in package recipe requires libglib-2.0.so.0()(64bit), but no providers found in RDEPENDS_recipe? [file-rdeps]

我的问题是,你们中的一些人知道 Yocto 如何提取 tarball 中包含的每个库的依赖项列表吗?我想在 M_a 和 M_b 上执行该命令以比较输出并发现缺少的内容...提前非常感谢!

【问题讨论】:

  • 只是我的 2 美分:我会为两台机器运行 'bitbake -e recipe > log' 并区分它们
  • 非常感谢,这可能会有所帮助。我会检查...

标签: dependencies libraries yocto


【解决方案1】:

您可以在 meta/classes/package.bbclass::package_do_shlibs() 中欣赏美丽的怪物——但我会通过在两个 tarball 中的库和二进制文件上运行稍微简单的 oneliner 来开始调试:

objdump -p libcustom.so | grep NEEDED

【讨论】:

  • 两个编译中的 tarball 是相同的(同一个存储库用于在两个构建机器中下载源代码)。所以显然需要库的列表是完全相同的(我已经检查过了)。据我所知,yocto 不应该依赖于任何宿主库。这有点疯狂。
  • 引用的 bbclass 可能会有所帮助。我将检查这个 ${HOST_PREFIX}objdump 跨工具命令,因为它可能在两个平台上的工作方式并不完全相同。谢谢!
【解决方案2】:

我检查了 objdump -p libcustom.so | 的输出grep NEED,输出在 M_a 和 M_b 机器上是完全相同的一组库。

但是我发现在 workdir 中生成的“recipe.spec”文件包含不同的库集(libusb:386 和 libsystemd:386 出现在一台机器上,而不是另一台机器上)。这对我来说听起来真的很奇怪,因为我不明白 Yocto 不是一个依赖于执行编译的主机的工具。

M_a 和 M_b 安装了不同的软件包集,但它们都具有构建 Yocto 所需的最少库集。但是有超过 100 个不同的包,发现破坏 de 编译的包是相当困难的,因为每次编译都需要很长时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2015-12-28
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多