Yocto理论篇 | Yocto自动添加运行时依赖项

介绍OpenEmbedded构建系统如何自动处理包间的运行时依赖项,包括共享库、pkg-config模块及-dev/-dbg包之间的依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenEmbedded构建系统会自动在包之间添加常见类型的运行时依赖项,这意味着您不需要使用RDEPENDS显式声明包。有三种自动机制(shlibdeps,、pcdeps和 depchains)分别处理共享库、包配置(pkg-config)模块、-dev包和 -dbg包。对于其他类型的运行时依赖项,必须手动声明这些依赖项。

  • shlibdeps:在每个配方的do_package 任务期间,将找到该配方安装的所有共享库。对于每个共享库,包含共享库的包注册为提供共享库。更具体地说,该包注册为提供库的soname 。生成的共享库到包的映射由do_packagedata 任务全局保存在PKGDATA_DIR 中。同时,将检查配方安装的所有可执行文件和共享库,以查看它们链接到哪些共享库。对于找到的每个共享库依赖项,将查询PKGDATA_DIR 以查看某个包(可能来自不同的配方)是否包含共享库。如果找到这样的包,则会将依赖于共享库的包添加到包含该库的包中。自动添加的运行时依赖项还包括版本限制。此版本限制指定至少必须使用提供共享库的包的当前版本,就像已将“package (>=version)”添加到RDEPENDS一样。如果需要,在安装依赖于该库的包时,这将强制升级包含共享库的包。如果您想避免一个包被注册为提供一个特定的共享库(例如,因为该库仅供内部使用),那么将该库添加到包的配方中的私有库中。
  • pcdeps:在每个配方的do_package 任务期间,将找到配方安装的所有pkg配置模块(*.pc文件)。对于每个模块,包含该模块的包注册为提供该模块。生成的模块到包的映射由do_packagedata任务全局保存在PKGDATA_DIR 中。同时,检查配方安装的所有pkg-config模块,以查看它们所依赖的其他pkg-config模块。如果一个模块包含一个指定另一个模块的“Requires:”行,那么它将被视为依赖于另一个模块。如果每个模块都包含一些模块,请查看包的依赖关系。如果找到这样的包,则会将依赖于该模块的包中的运行时依赖项添加到包含该模块的包中。

注意:pcdeps 机制通常推断-dev包之间的依赖关系。

  • depchains:如果包foo依赖于包bar,那么foo dev和foo dbg也分别依赖于bar dev和bar dbg。以-dev包为例,bar dev包可能提供foo dev所需的头和共享库符号链接,这表明了包之间需要依赖关系。depchains 添加的依赖项以RRECOMMENDS的形式存在。

注意:默认情况下,foo-dev对foo也有一个RDEPENDS-样式依赖关系,因为RDEPENDS_${PN}-dev(在bitbake.conf中设置)包括“${PN}”。为了确保依赖链永远不会断开,默认情况下总是生成--dev-dbg包,即使包是空的。

通过使用[deptask]声明,do_package 任务依赖于depends中每个配方的do_packagedata 任务,这保证只要正确设置了DEPENDS ,所需的共享库/模块到包的映射信息将在需要时可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值