将标准库添加到 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"
我有基于 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"