Yocto Kirkstone无法将.so库打包至根文件系统问题求助
Yocto配方修复:正确安装.so库到/usr/lib
问题分析
- 库大小异常:你安装的
libwakeup_handling.so大概率是编译生成的软链接(指向实际的libwakeup_handling.so.1.0.0),直接复制软链接只会生成大小很小的链接文件,而非实际二进制库。 - 无法直接安装到${libdir}:
install参数使用不当,加上手动切换目录的操作,导致安装路径逻辑混乱。 - 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配置:只保留必要的库文件路径,去掉冗余和硬编码的无效路径。
验证步骤
- 执行
bitbake <你的配方名> -c cleanall清理旧构建产物 - 重新执行
bitbake <你的配方名> - 检查
tmp/work/<你的机器架构>/<配方名>/<版本号>/image/usr/lib/目录:libwakeup_handling.so.1.0.0大小应为150kB左右- 软链接
libwakeup_handling.so、libwakeup_handling.so.1正确指向实际库文件
- 确认根文件系统镜像中,库文件已正确部署到/usr/lib目录
内容的提问来源于stack exchange,提问作者Sbon
相关产品推荐
相关产品推荐

