如何解决Yocto:封闭的源库,包含用于库和标头的单独软件包
我有自己的.so封闭源代码库并提供头文件。我的.so库文件应位于yocto映像内,但头文件应仅在其他项目编译期间使用。
这里是yocto收据:
SUMMARY = "foo library"
LICENSE = "CLOSED"
SECTION = "libs"
SRC_URI = "file://usr/lib/libfoo.so \
file://usr/include/foo.h "
S = "${WORKDIR}"
inherit autotools pkgconfig
do_compile() {
}
do_install() {
install -d ${D}/usr/lib
install -m 0755 ${WORKDIR}/usr/lib/libfoo.so ${D}/usr/lib/libfoo.so.1
ln -s /usr/lib/libfoo.so.1 ${D}/usr/lib/libfoo.so
install -d ${D}/usr/include
install -m 0644 ${WORKDIR}/usr/include/foo.h ${D}/usr/include/
}
FILES_${PN}-dev += "${includedir} "
FILES_${PN} += "/usr/lib/libfoo.so \
/usr/lib/libfoo.so.1"
PROVIDES += "libfoo"
我希望$ {PN}软件包具有libfoo.so和libfoo.so.1,而$ {PN} -dev软件包只有一个头文件。但是yocto bitbake仅复制$ {PN}中的libfoo.so.1,而libfoo.so位于$ {PN} -dev数据包中。
您能帮我如何将文件移至$ {PN}包中吗?
解决方法
此行为是正确的。未版本化的.so文件安装在-dev软件包中,因为系统中的软件包应针对版本文件进行链接。
需要在映像中安装-dev软件包是非常罕见的,因此有效地,只有您的版本化的so文件才能创建它。
如您所见,标头位于-dev包中,因此除非将-dev包显式添加到映像中,否则不会将其添加到映像中。
由于头文件位于includedir
中,该文件是用于其他配方(参见SYSROOT_DIRS
)的sysroot的目录之一,因此在构建时,其他配方可以使用它。与您的库相同,安装在lib_dir
中(也在上述变量中)。
因此,当前的行为是预期的。目前尚不清楚为什么还要在主程序包中也要使用非版本的符号链接。
如果出于某种原因这确实是您想要做的,则只需在食谱中添加以下内容:
SOLIBS = ".so"
FILES_SOLIBSDEV = ""