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

时间:2017-05-10 17:12:41

标签: image arm standards bitbake

我有基于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正在尝试   在这些文件已存在时将文件安装到共享区域。   这些文件及其清单位置是:
  /家庭/ MYUSER /仓库/我的平台/编译/ TMP-的glibc / sysroots /我-板xc7z030 / pkgdata /运行退/的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中匹配。打包'请   验证哪个配方应提供上述文件。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

更新

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

 IMAGE_INSTALL_append = " libstdc++6"