执行do_install后lib目录未创建的原因咨询(Yocto构建场景)
问题原因及解决办法
你在hello.bb的do_install中创建了空的${D}/lib目录,但最终镜像里没有保留,核心原因是Yocto的根文件系统后处理会自动删除空目录。
Yocto的OpenEmbedded核心默认启用了rootfs_remove_empty_dirs命令,它属于ROOTFS_POSTPROCESS_COMMAND的一部分,会在生成最终镜像前遍历并清理所有空目录。你的/lib目录因为没有任何文件被安装进去,所以被这个过程删除了;而lic目录大概率是后续有许可证文件被自动填充,因此得以保留。
解决办法:
- 如果是要存放库文件:不要直接创建
${D}/lib,改用Yocto提供的${libdir}变量(它会根据目标架构自动指向/usr/lib或/usr/lib64),并将对应的库文件安装到该目录下。示例:
目录有实际内容后,就不会被清理。install -m 0644 libhello.so ${D}${libdir} - 如果确实需要保留空目录:可以在目录中添加一个占位文件,避免被判定为空:
也可以直接禁用空目录清理(不推荐,会保留大量无意义空目录):install -d ${D}/lib touch ${D}/lib/.keepROOTFS_POSTPROCESS_COMMAND_remove = "rootfs_remove_empty_dirs"
内容的提问来源于stack exchange,提问作者Jaehyun Lee
相关产品推荐
相关产品推荐

