3

情况是:有一个名为 A 的 ipk 和另一个名为 B.B
对 A 有运行时依赖项(根据 A 的 bitbake 配方)
但是,B 中的源文件#include <some_header_in_A>
对我来说这看起来像是一个构建依赖项,但后来我无法向自己解释为什么 bitbake 配方具有运行时依赖性。
任何帮助表示赞赏,还有一些解释性教程的链接。

4

1 回答 1

2

回想一下我对你其他问题的回答

  • 如果T DEPENDS on P那么Tdo_configure任务依赖于Pdo_populate_sysroot任务。

  • 如果T RDEPENDS 依赖于PTdo_build任务将依赖于Pdo_package_write任务。

因此,您的B RDEPENDS在您的 A上的事实意味着Ado_package_write在构建时已经通过了所有阶段B,包括 do_populate_sysroot. 因此,在构建B时, A导出到 sysroot 的任何标头都已经存在,并且将满足构建时间依赖性。

如果B包含由A导出的标头,则这构建时依赖项。但这并不排除B也对A有运行时依赖。实际上,通常情况下,如果B运行时依赖于A ,那么它也依赖于构建时A,正是因为(对于 C/C++ 包)运行时依赖通常意味着构建B需要来自A 的头文件。

如果您的配方A上指定B ,那么它需要一点点运气才能成功。如果碰巧B包含对A标头 是否存在的检查,并且所有正在运行的依赖项使得B可以在A完成 之前运行,那么该检查A标头可能会失败。RDEPENDSdo_configuredo_configuredo_populate_sysroot

为了使配方完全正确和安全,它应该同时指定A RDEPENDS上的BAB。 DEPENDS

于 2015-06-15T19:03:31.463 回答