【问题标题】:What is the correct way of adding standard library to yocto image将标准库添加到yocto image的正确方法是什么
【发布时间】:2017-05-10 17:12:40
【问题描述】:

我有基于 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:食谱 my-recipe 正在尝试 当这些文件已经存在时,将文件安装到共享区域。 这些文件及其清单位置是:
/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


    【解决方案1】:

    如果你有一个应用程序可以链接它(至少你正常链接到它们),你不需要显式地向你的图像添加库。

    相反,为您的 C++ 应用程序编写一个配方。对于libstdc++.so.6,会自动为你检测到这个运行时依赖。

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

    更新:

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

     IMAGE_INSTALL_append = " libstdc++6"
    

    【讨论】:

    • 感谢您的回答@Anders,我不打算将我的应用程序放在图像中,但它似乎几乎是必须的。您需要做一些奇怪的事情,例如手动复制库等。我为我的应用程序添加了一个配方,它已解决。
    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2018-07-20
    • 2016-11-09
    • 2023-04-09
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多