Yocto中如何让依赖配方获取Poco生成的arc可执行文件?
Yocto环境下解决构建阶段依赖工具传递问题
问题背景
现有application_1.0.0.bb配方依赖poco_1.11.2.bb,配置DEPENDS = "poco"。在application的配置阶段需要使用Poco生成的arc可执行工具,该工具存在于Poco工作目录的package/usr/bin/arc路径,但未同步到application的工作目录。此前编写的poco_%.bbappend尝试复制工具但触发already-stripped错误,添加跳过检查后仍未解决问题。
解决方案
1. 修正Poco的bbappend配置
核心要解决两个问题:将arc工具纳入打包范围、避免重复strip冲突。编辑poco_%.bbappend:
# 把arc工具纳入Poco的开发包(供构建阶段调用) FILES_${PN}-dev += "${bindir}/arc" do_install:append() { # 仅在文件存在时执行,避免重复操作 if [ -f ${WORKDIR}/package/usr/bin/arc ]; then install -d ${D}${bindir} # 跳过strip操作,避免already-stripped错误 install -m 0755 --strip-program=true ${WORKDIR}/package/usr/bin/arc ${D}${bindir} fi } # 若仍有strip检查报错,添加跳过规则(优先用--strip-program=true) INSANE_SKIP:${PN}:append = " already-stripped"
2. 更新application配方的依赖
确保application能获取到Poco的开发包内容,修改application_1.0.0.bb:
DEPENDS = "poco poco-dev"
3. 验证工具同步状态
构建Poco后,检查目标sysroot路径(如tmp/sysroots/<你的机器架构>/usr/bin/arc)是否存在arc文件。确认存在后,重新构建application即可在配置阶段调用该工具。
关键说明
- Yocto中,构建阶段使用的目标架构工具需纳入
-dev包,才会同步到依赖配方的构建sysroot;若为主机架构工具,需封装到xxx-native包并通过DEPENDS += "xxx-native"依赖。 - 优先用
--strip-program=true跳过strip操作,减少INSANE_SKIP的使用,避免破坏Yocto的默认检查机制。
内容的提问来源于stack exchange,提问作者mmnano50
相关产品推荐
相关产品推荐

