通过包含头文件可以实现运行时依赖性吗?

时间:2015-06-15 10:05:02

标签: c++ dependencies bitbake

案例是:有一个叫做A的ipk和另一个叫做B.的 B具有与A的运行时依赖性(根据A的bitbake配方)
但是,B中的源文件具有#include <some_header_in_A>
这看起来像是对我的构建依赖,但是我无法向自己解释为什么bitbake配方具有运行时依赖性。
感谢任何帮助,也是一些解释性教程的链接。

1 个答案:

答案 0 :(得分:1)

回想一下answer to your other question

  • 如果 T 依赖于 P ,那么 T do_configure任务将依赖于 在 P do_populate_sysroot任务。

  • 如果在 P T RDEPENDS,那么 T do_build任务ia依赖于 P do_package_write任务。

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

如果 B 包含由 A 导出的标头,则此 是构建时依赖项。但那 不排除 B 也对 A 具有运行时依赖性。事实上它通常是 如果 B 依赖于运行时 A ,那么它也是依赖于构建时间的 在 A 上,正是因为(对于C / C ++包)通常的运行时依赖性 表示构建 B 需要来自 A 的标题。

如果您的食谱 A 上指定 B RDEPENDS,那么它需要一点点 幸运的是成功。如果碰巧是 B do_configure 包括检查是否存在 A 标题,所有 游戏中的依赖关系使 B do_configure成为可能 在 A do_populate_sysroot完成之前运行,然后就是这样 检查 A 标头可能会失败。

为使配方完全正确和安全,它应指定两者 B RDEPENDS A B DEPENDS A