Yocto构建中libft4222共享库符号链接未打包至根文件系统问题
解决Yocto Kirkstone中libft4222符号链接未安装到根文件系统的问题
你的问题核心在于Yocto的库打包规则和配方中的自定义配置冲突,导致libft4222.so符号链接未被纳入运行包。以下是具体分析和修复方案:
问题原因
- 自定义
SOLIBS覆盖默认逻辑:你设置的SOLIBS = "${libdir}/libft4222.so.${PV}"替换了Yocto默认的版本化库处理规则,打乱了符号链接的归属判定。 - 符号链接默认归属开发包:Yocto默认将
.so符号链接归类到${PN}-dev开发包(供编译阶段使用),而非${PN}运行包(供目标系统运行时使用)。因此仅安装libft4222时,符号链接不会被加入根文件系统。
修复方案
根据你的需求选择对应的处理方式:
方式1:仅在编译阶段使用符号链接(推荐)
如果你的应用仅在构建时需要libft4222.so符号链接,无需在目标镜像中保留,只需在应用配方中添加对libft4222-dev的依赖,同时调整libft4222配方如下:
SUMMARY = "FTDI FT4222H Library" SECTION = "libs" LICENSE_FLAGS = "ftdi" LICENSE = "CLOSED" SRC_URI = "https://www.ftdichip.com/Support/SoftwareExamples/libft4222-linux-${PV}.tgz" SRC_URI[sha256sum] = "b92ca18e4d8d6aafed31b5f74d0822fae071de7ac6b88e5fe9427e14e1dc9b11" S = "${WORKDIR}" ARCH_DIR:x86-64 = "build-x86_64" ARCH_DIR:i586 = "build-i386" ARCH_DIR:i686 = "build-i386" ARCH_DIR:raspberrypi4 = "build-arm-v7-hf" do_install () { install -m 0755 -d ${D}${libdir} oe_soinstall ${S}/${ARCH_DIR}/libft4222.so.${PV} ${D}${libdir} install -d ${D}${includedir} install -m 0755 ${S}/*.h ${D}${includedir} } # 移除自定义的SOLIBS配置,恢复Yocto默认处理逻辑 # SOLIBS = "${libdir}/libft4222.so.${PV}" FILES:${PN} += "${libdir}/libft4222.so.${PV}"
此时libft4222-dev包会自动包含libft4222.so符号链接,应用构建时依赖该包即可。
方式2:将符号链接加入目标镜像运行包
如果确实需要在目标系统中保留libft4222.so,修改libft4222配方如下:
SUMMARY = "FTDI FT4222H Library" SECTION = "libs" LICENSE_FLAGS = "ftdi" LICENSE = "CLOSED" SRC_URI = "https://www.ftdichip.com/Support/SoftwareExamples/libft4222-linux-${PV}.tgz" SRC_URI[sha256sum] = "b92ca18e4d8d6aafed31b5f74d0822fae071de7ac6b88e5fe9427e14e1dc9b11" S = "${WORKDIR}" ARCH_DIR:x86-64 = "build-x86_64" ARCH_DIR:i586 = "build-i386" ARCH_DIR:i686 = "build-i386" ARCH_DIR:raspberrypi4 = "build-arm-v7-hf" do_install () { install -m 0755 -d ${D}${libdir} oe_soinstall ${S}/${ARCH_DIR}/libft4222.so.${PV} ${D}${libdir} install -d ${D}${includedir} install -m 0755 ${S}/*.h ${D}${includedir} } # 移除自定义的SOLIBS配置 # SOLIBS = "${libdir}/libft4222.so.${PV}" # 将符号链接加入运行包 FILES:${PN} += "${libdir}/libft4222.so" # 从开发包中移除该符号链接,避免重复打包 FILES:${PN}-dev:remove = "${libdir}/libft4222.so"
验证
修改配方后,重新构建:
bitbake libft4222
检查根文件系统镜像或libft4222包内容,确认libft4222.so已被正确包含。
内容的提问来源于stack exchange,提问作者Klickmann
相关产品推荐
相关产品推荐

