向yocto镜像添加标准库的正确方法是什么

问题描述 投票:0回答:2

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

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 目录。这是错误:

错误:my-recipe-1.0-r0 do_packagedata:我的食谱正在尝试的食谱 当文件已存在时将文件安装到共享区域。 这些文件及其清单位置是:
/home/myUser/REPOS/my-platform/build/tmp-glibc/sysroots/my-board-xc7z030/pkgdata/runtime-reverse/libstdc++6 与 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 在 b'manifest-my-board-xc7z030-gcc-runtime 中匹配。请打包数据 验证哪个配方应提供上述文件。

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

谢谢!

image arm standards bitbake
2个回答
2
投票

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

相反,为您的 C++ 应用程序编写一个配方。对于

libstdc++.so.6
,系统会自动为您检测此运行时依赖关系。

如果它是另一个库,您需要将其配方添加到构建时间依赖项中,

DEPENDS
;运行时部分仍然会自动处理。

更新:

如果您想将

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

 IMAGE_INSTALL_append = " libstdc++6"

0
投票

IMAGE_INSTALL_append =“libstdc++”

去掉“6”

© www.soinside.com 2019 - 2024. All rights reserved.