You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何bb类文件未加--strip选项,install仍剥离二进制文件?

Yocto构建中install未指定--strip却触发"already-stripped"错误的原因分析

问题场景

我的.bb文件中包含如下代码:

do_install_append() 
{
    install -d "${D}${systemd_system_unitdir}"
    sed -e "s:@bindir@:${bindir}:" -e "s:@datadir@:${datadir}:" \
     "${WORKDIR}/${BPN}_everest.service" \
    >"${D}${systemd_system_unitdir}/${BPN}.service"

    bbwarn "Creating folder: ${D}/${bindir} using workdir: ${WORKDIR}"
    install -d "${D}${bindir}"
    install -m 755 "${WORKDIR}/Linux_Daemon_ITS_V4_0_0_0_arm64" "${D}${bindir}"
}

其中ITS工具二进制文件已被剥离,导致构建失败并抛出"already-stripped"错误。我已添加INSANE_SKIP_${PN}_append = "already-stripped"规避问题,但核心疑问是:为何未显式指定--strip选项的install命令,会引发剥离相关的错误?

原因分析

  • Yocto环境中的install是包装后的命令
    Yocto构建环境里的install并非系统原生命令,而是OE-Core提供的包装脚本(通过oe-run-native调用)。这个包装脚本会自动读取Yocto的全局构建配置,比如当STRIP变量已配置、或DEBUG_BUILD设为false时,会自动给install添加--strip参数,哪怕你在recipe里没写这个选项。

  • 二进制文件本身已提前被剥离
    你从${WORKDIR}中复制的Linux_Daemon_ITS_V4_0_0_0_arm64可能在进入构建环境前就已经是剥离状态(比如上游提供的预编译二进制本身就是stripped版本)。Yocto的sanity check会扫描安装到${D}目录的文件,一旦发现文件已经被剥离,就会抛出"already-stripped"错误——这个错误和install命令无关,是文件本身的状态导致的。

  • 继承的bbclass会自动执行剥离任务
    你的recipe大概率继承了base.bbclass这类基础类,其中包含do_strip任务。这个任务会在do_install之后自动对${D}目录下的所有二进制文件执行剥离操作。哪怕你用install时没加--strip,后续的do_strip任务仍会尝试处理该文件;如果文件已经被剥离,就会触发冲突报错。

内容的提问来源于stack exchange,提问作者Tom Orsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:47:06