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

Yocto Kirkstone无法将.so库打包至根文件系统问题求助

Yocto配方修复:正确安装.so库到/usr/lib

问题分析

  1. 库大小异常:你安装的libwakeup_handling.so大概率是编译生成的软链接(指向实际的libwakeup_handling.so.1.0.0),直接复制软链接只会生成大小很小的链接文件,而非实际二进制库。
  2. 无法直接安装到${libdir}:install参数使用不当,加上手动切换目录的操作,导致安装路径逻辑混乱。
  3. FILES变量冗余:重复声明同一路径,且硬编码/lib路径(Yocto中${libdir}默认映射到/usr/lib,无需单独指定)。

修复后的配方代码

DESCRIPTION = "Personal Libwakeup Library"
LICENSE = "CLOSED"

SRC_URI = "gitsm://xxxx.git;protocol=https;branch=master"
SRCREV = "${AUTOREV}"

S = "${WORKDIR}/git"
B = "${S}"  # 保持原地编译配置

PACKAGECONFIG ??= ""

# 明确声明要打包的文件:实际库文件+软链接
FILES:${PN} += " \
    ${libdir}/libwakeup_handling.so.* \
    ${libdir}/libwakeup_handling.so \
"

TARGET_CC_ARCH += "${LDFLAGS}"
INSANE_SKIP:${PN} = "ldflags"
INSANE_SKIP:${PN}-dev = "ldflags"

EXTRA_OEMAKE = "all"

do_compile:prepend() {
    (cd ${S}/Debug && oe_runmake)
}

do_install() {
    # 先安装实际的二进制库到/usr/lib
    install -Dm 0644 ${B}/Debug/libwakeup_handling.so.1.0.0 ${D}${libdir}/libwakeup_handling.so.1.0.0
    
    # 直接在目标路径创建软链接,无需切换目录
    ln -sf libwakeup_handling.so.1.0.0 ${D}${libdir}/libwakeup_handling.so.1
    ln -sf libwakeup_handling.so.1 ${D}${libdir}/libwakeup_handling.so
}

关键修复点

  • 优先安装实际库文件:直接指定安装libwakeup_handling.so.1.0.0(这是编译生成的150kB大小的实际二进制库),避免复制软链接。
  • 简化安装逻辑:去掉多余的子目录,直接将库安装到${D}${libdir},路径清晰无歧义。
  • 规范软链接创建:在目标安装目录下直接生成软链接,无需切换目录操作。
  • 清理FILES配置:只保留必要的库文件路径,去掉冗余和硬编码的无效路径。

验证步骤

  1. 执行bitbake <你的配方名> -c cleanall清理旧构建产物
  2. 重新执行bitbake <你的配方名>
  3. 检查tmp/work/<你的机器架构>/<配方名>/<版本号>/image/usr/lib/目录:
    • libwakeup_handling.so.1.0.0大小应为150kB左右
    • 软链接libwakeup_handling.so、libwakeup_handling.so.1正确指向实际库文件
  4. 确认根文件系统镜像中,库文件已正确部署到/usr/lib目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:19