首页 > 解决方案 > Yocto dunfell 配方,不能依赖 hdf5

问题描述

我正在使用 yocto 3.1(dunfell) 创建一个名为 (eeel) 的配方,它依赖于 hdf5。

在我的食谱中,hdf5列于DEPENDS

DEPENDS += " zlib protobuf protobuf-native curl asio tclap hdf5"

当我bitbake eeel(我的食谱)时,我收到了这个错误:

| CMake Error at /home/concc/yocto-tegra/build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/share/cmake/hdf5/hdf5-targets.cmake:219 (message):
|   The imported target "hdf5::h5diff" references the file
| 
|      "/home/concc/yocto-tegra/build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/bin/h5diff"
| 
|   but this file does not exist.  Possible reasons include:
| 
|   * The file was deleted, renamed, or moved to another location.
| 
|   * An install or uninstall procedure did not complete successfully.
| 
|   * The installation package was faulty and contained
| 
|      "/home/concc/yocto-tegra/build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/share/cmake/hdf5/hdf5-targets.cmake"
| 
|   but not all the files it references.
| 
| Call Stack (most recent call first):
|   /home/concc/yocto-tegra/build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/share/cmake/hdf5/hdf5-config.cmake:127 (include)
|   CMakeLists.txt:12 (find_package)
| 
| 
| -- Configuring incomplete, errors occurred!

似乎这build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/bin/h5diff是意料之中的。我检查了文件夹,h5diff没有。所以我猜错误信息是正确的。

然后我检查了build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/lib,libhdf5.a 和 libhdf5.so 和其他 libhdf5* 文件都在那里,这是 hdf5 成功构建的标志?

我还检查了build/tmp/work/aarch64-poky-linux/hdf5/1.8.21-r0/image/usr/bin,它是 hdf5 的输出,h5diff是否存在。所以生成了h5diff。

所以这是我的结论:hdf5 已成功编译、安装,它的 lib 文件被复制到我的配方中recipe-sysroot/usr/lib,但它的可执行文件没有被复制到我的recipe-sysroot/usr/bin.

我不确定这是否是 hdf5 的配方文件 ( http://layers.openembedded.org/layerindex/recipe/123207/ ) 的错误,或者我错过了 eeel 的 .bb 文件中的某些内容。

无论如何要将h5diff文件复制到我的recipe-sysroot/usr/bin?

它与do_prepare_recipe_sysroothttps://docs.yoctoproject.org/singleindex.html#ref-tasks-prepare-recipe-sysroot)有关吗?

谢谢

标签: linuxcmakeyoctohdf5bitbake

解决方案


要在目标上运行的二进制文件不是 sysroot 的一部分,因为 sysroot 仅用于构建时依赖项,并且目标二进制文件不能在构建时使用。SYSROOT_DIRS指定在 sysroot 中安装哪些文件/目录(参见https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS)。

如果hdf5应该在构建时执行,则需要DEPENDSonhdf5-native以便为主机架构构建的二进制文件可以在构建时运行。SYSROOT_DIRS_NATIVE指定哪些文件/目录安装在 sysroot-native 中(针对主机架构编译;参见https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS_NATIVE)。如果您需要hdf5在运行时链接或需要它的二进制文件,您将同时拥有hdf5-nativehdf5in DEPENDS


推荐阅读