Bitbake 不填充所以符号链接到共享库
Bitbake does not populate so symlinks to shared libaries
在我的 Yocto 层中,我有这样的 Qt Gstreamer 库的 bitbake 配方:
SUMMARY = "QtGStreamer libraries for Qt5"
DESCRIPTION = "QtGStreamer is a set of libraries and plugins providing C++ bindings for GStreamer with a Qt-style API plus some helper classes for integrating GStreamer better in Qt applications."
SECTION = "multimedia"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
SRC_URI[md5sum] = "fd794045a828c184acc1794b08a463fd"
SRC_URI[sha256sum] = "9f3b492b74cad9be918e4c4db96df48dab9c012f2ae5667f438b64a4d92e8fd4"
SRC_URI = "http://gstreamer.freedesktop.org/src/qt-gstreamer/${PN}-${PV}.tar.xz"
RDEPENDS_${PN} = "libgstpbutils-1.0 \
gstreamer1.0 \
qtdeclarative \
glib-2.0 \
libgstvideo-1.0 \
libgstapp-1.0 \
libgstaudio-1.0 \
qtbase \
"
inherit cmake_qt5
export EXTRA_OECMAKE = "-DQT_VERSION=5 \
-DHW_PLATFORM=imx6 \
-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${STAGING_DIR_NATIVE}/usr/bin/qt5/ \
-DUSE_QT_PLUGIN_DIR=OFF \
-DCMAKE_SKIP_INSTALL_RPATH=YES \
-DCMAKE_SKIP_RPATH=YES \
-DCMAKE_INSTALL_PREFIX="/" \
"
FILES_${PN} += "\
${libdir}/gstreamer-1.0/* \
"
INSANE_SKIP_qt-gstreamer = "installed-vs-shipped"
EXTRA_OECONF += "--disable-rpath"
由于临时构建目录中的这个配方,我为每个创建的共享库创建了 3 个文件——一个实际库和两个符号链接,如下所示:
libQt5GStreamer-1.0.so -> libQt5GStreamer-1.0.so.0
libQt5GStreamer-1.0.so.0 -> libQt5GStreamer-1.0.so.1.2.0
libQt5GStreamer-1.0.so.1.2.0
现在我想知道为什么在 ${PN} 包中我有文件 libQt5GStreamer-1.0.so.0
和 libQt5GStreamer-1.0.so.1.2.0
但没有 libQt5GStreamer-1.0.so
?
另一方面,我将此文件包含在包 ${PN}-dev
.
中
我尝试使用 FILES_${PN}
将此文件复制到包 ${PN} 中,但随后出现 QA 错误,我无法在非开发包中使用 so 符号链接。
我播放视频的 Qt 应用程序依赖于这些 *.so 文件,所以我需要将它们放在我的目标 rootfs 上。
如何将这些文件添加到图像中?
My Qt application to play video depends on these *.so
这可能是您应该解决的问题:应用程序在运行时不应需要 .so。 Yocto 安装库和符号链接的方式非常标准:您会在 Ubuntu 和其他发行版中找到相同的部分。
您可以使用 INSANE_SKIP_${PN} += "dev-so"
消除 QA 警告,但这不会改变应用程序中可能存在错误的事实。
或者您当然可以让您的应用程序依赖于 -dev 包。
在我的 Yocto 层中,我有这样的 Qt Gstreamer 库的 bitbake 配方:
SUMMARY = "QtGStreamer libraries for Qt5"
DESCRIPTION = "QtGStreamer is a set of libraries and plugins providing C++ bindings for GStreamer with a Qt-style API plus some helper classes for integrating GStreamer better in Qt applications."
SECTION = "multimedia"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
SRC_URI[md5sum] = "fd794045a828c184acc1794b08a463fd"
SRC_URI[sha256sum] = "9f3b492b74cad9be918e4c4db96df48dab9c012f2ae5667f438b64a4d92e8fd4"
SRC_URI = "http://gstreamer.freedesktop.org/src/qt-gstreamer/${PN}-${PV}.tar.xz"
RDEPENDS_${PN} = "libgstpbutils-1.0 \
gstreamer1.0 \
qtdeclarative \
glib-2.0 \
libgstvideo-1.0 \
libgstapp-1.0 \
libgstaudio-1.0 \
qtbase \
"
inherit cmake_qt5
export EXTRA_OECMAKE = "-DQT_VERSION=5 \
-DHW_PLATFORM=imx6 \
-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${STAGING_DIR_NATIVE}/usr/bin/qt5/ \
-DUSE_QT_PLUGIN_DIR=OFF \
-DCMAKE_SKIP_INSTALL_RPATH=YES \
-DCMAKE_SKIP_RPATH=YES \
-DCMAKE_INSTALL_PREFIX="/" \
"
FILES_${PN} += "\
${libdir}/gstreamer-1.0/* \
"
INSANE_SKIP_qt-gstreamer = "installed-vs-shipped"
EXTRA_OECONF += "--disable-rpath"
由于临时构建目录中的这个配方,我为每个创建的共享库创建了 3 个文件——一个实际库和两个符号链接,如下所示:
libQt5GStreamer-1.0.so -> libQt5GStreamer-1.0.so.0
libQt5GStreamer-1.0.so.0 -> libQt5GStreamer-1.0.so.1.2.0
libQt5GStreamer-1.0.so.1.2.0
现在我想知道为什么在 ${PN} 包中我有文件 libQt5GStreamer-1.0.so.0
和 libQt5GStreamer-1.0.so.1.2.0
但没有 libQt5GStreamer-1.0.so
?
另一方面,我将此文件包含在包 ${PN}-dev
.
我尝试使用 FILES_${PN}
将此文件复制到包 ${PN} 中,但随后出现 QA 错误,我无法在非开发包中使用 so 符号链接。
我播放视频的 Qt 应用程序依赖于这些 *.so 文件,所以我需要将它们放在我的目标 rootfs 上。
如何将这些文件添加到图像中?
My Qt application to play video depends on these *.so
这可能是您应该解决的问题:应用程序在运行时不应需要 .so。 Yocto 安装库和符号链接的方式非常标准:您会在 Ubuntu 和其他发行版中找到相同的部分。
您可以使用 INSANE_SKIP_${PN} += "dev-so"
消除 QA 警告,但这不会改变应用程序中可能存在错误的事实。
或者您当然可以让您的应用程序依赖于 -dev 包。