将标准库添加到 yocto 图像的正确方法是什么

What is the correct way of adding standard library to yocto image

我有基于 yocto 项目创建的自定义图像 运行 在 Zynq 上的 Arm cortex A9 处理器上。我在 Linux 机器上使用交叉编译器编译我的应用程序,并尝试在 Arm 上 运行 它。但是它给出了一个错误,询问它找不到 libstdc++6 库。这个库真的不包含在我的图像中。当我手动将 libstdc++.so.6 复制到目标上的 /lib 文件夹时,它 运行s 成功了。因此,我想构建我的图像以包含该库本身。我尝试创建如下所示的食谱

DESCRIPTION = "Copy necessary lib files to rootfs/lib directory"
LICENSE = "CLOSED"
PACKAGE_ARCH = "all"
SRC_URI += " \
    file://libstdc++.so.6 \
    file://libstdc++.so.6.0.22 \
"

do_install () {
    install -d ${D}${base_libdir}/
    install -m 755 ${WORKDIR}/libstdc++.so.6 ${D}${base_libdir}/
    install -m 755 ${WORKDIR}/libstdc++.so.6.0.22 ${D}${base_libdir}/
}

FILES_${PN} += " \
    ${base_libdir}/libstdc++.so.6 \
    ${base_libdir}/libstdc++.so.6.22 \
"

但它给出了这些库已经存在于共享区域中的错误。但我无法弄清楚如何从该共享复制到图像中的 /lib 目录。这是错误:

ERROR: my-recipe-1.0-r0 do_packagedata: The recipe my-recipe is trying to install files into a shared area when those files already exist. Those files and their manifest location are:
/home/myUser/REPOS/my-platform/build/tmp-glibc/sysroots/my-board-xc7z030/pkgdata/runtime-reverse/libstdc++6 Matched in b'manifest-my-board-xc7z030-gcc-runtime.packagedata' /home/myUser/REPOS/my-platform/build/tmp-glibc/sysroots/my-board-xc7z030/pkgdata/runtime-reverse/libstdc++-dev Matched in b'manifest-my-board-xc7z030-gcc-runtime.packagedata' Please verify which recipe should provide the above files.

那么将标准库放入镜像的正确方法是什么?

谢谢!

如果您有一个再次链接它的应用程序(至少在您正常链接到它们时),您不需要明确地将库添加到您的图像中。

相反,为您的 C++ 应用程序编写一个方法。在 libstdc++.so.6 的情况下,将自动为您检测此运行时依赖项。

如果它是另一个库,您需要将它的配方添加到构建时间依赖性中,DEPENDS;运行时部分仍将自动处理。

更新:

如果你想添加libstdc++.so.6到你的图像,而不添加任何C++应用程序;只需添加

 IMAGE_INSTALL_append = " libstdc++6"