简体   繁体   English

Yocto dunfell 配方,不能依赖 hdf5

[英]Yocto dunfell recipe, cannot depend on hdf5

I'm using yocto 3.1(dunfell) to create a recipe called (eeel) which depends on hdf5.我正在使用 yocto 3.1(dunfell) 创建一个名为 (eeel) 的配方,它依赖于 hdf5。

In my recipe, hdf5 is listed in DEPENDS :在我的食谱中, hdf5列在DEPENDS中:

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

When I bitbake eeel (my recipe), I got this error:当我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!

it seems that build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/bin/h5diff is expected.似乎build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/bin/h5diff是预期的。 I checked the folder, h5diff is not there .我检查了文件夹,没有h5diff So I guess the error message is correct.所以我猜错误信息是正确的。

Then I checked build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/lib , libhdf5.a and libhdf5.so and other libhdf5* files are there, which is a sign of success build of hdf5?然后我检查了build/tmp/work/aarch64-poky-linux/eeel/5.8-r0/recipe-sysroot/usr/lib 、 libhdf5.a 和 libhdf5.so 以及其他 libhdf5* 文件,这是成功的标志hdf5的构建?

I also checked build/tmp/work/aarch64-poky-linux/hdf5/1.8.21-r0/image/usr/bin , which is the output of hdf5, h5diff is there.我还检查了build/tmp/work/aarch64-poky-linux/hdf5/1.8.21-r0/image/usr/bin ,这是hdf5的output, h5diff在那里。 so h5diff is generated.所以生成了h5diff。

So here is my conclusion: hdf5 is successfully compiled, installed, its lib files are copied to my recipe's recipe-sysroot/usr/lib , but its executables are not copied to my recipe-sysroot/usr/bin .所以这是我的结论:hdf5 已成功编译、安装,它的 lib 文件被复制到我的recipe-sysroot/usr/lib中,但它的可执行文件没有被复制到我的recipe-sysroot/usr/bin中。

I's not sure if it's a bug of hdf5's recipe file ( http://layers.openembedded.org/layerindex/recipe/123207/ ), or I missed something in my eeel's.bb file.我不确定这是否是 hdf5 的配方文件( http://layers.openembedded.org/layerindex/recipe/123207/ )的错误,或者我错过了 eeel's.bb 文件中的某些内容。

Anyway to copy the h5diff files into my recipe-sysroot/usr/bin ?无论如何要将h5diff文件复制到我的recipe-sysroot/usr/bin

Is it related to do_prepare_recipe_sysroot ( https://docs.yoctoproject.org/singleindex.html#ref-tasks-prepare-recipe-sysroot )?它与do_prepare_recipe_sysroothttps://docs.yoctoproject.org/singleindex.html#ref-tasks-prepare-recipe-sysroot )有关吗?

Thanks谢谢

Binaries to be run on target are not part of the sysroot because the sysroot is only for build time dependencies and target binaries cannot be used at build time.要在目标上运行的二进制文件不是 sysroot 的一部分,因为 sysroot 仅用于构建时依赖项,并且目标二进制文件不能在构建时使用。 SYSROOT_DIRS specifies which files/directories are installed in a sysroot (cf https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS ). SYSROOT_DIRS指定在 sysroot 中安装哪些文件/目录(参见https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS )。

If hdf5 is supposed to be executed at build time, you'll need to DEPENDS on hdf5-native so that the binary built for the host architecture can be run at build time.如果hdf5应该在构建时执行,您需要DEPENDS hdf5-native以便为主机架构构建的二进制文件可以在构建时运行。 SYSROOT_DIRS_NATIVE specifies which files/directories are installed in a sysroot-native (compiled for the host architecture; c.f. https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS_NATIVE ). SYSROOT_DIRS_NATIVE指定哪些文件/目录安装在 sysroot-native 中(针对主机架构编译;c.f. https://docs.yoctoproject.org/ref-manual/variables.html#term . If you need to link against hdf5 or need its binary at runtime too, you'll have both hdf5-native and hdf5 in DEPENDS .如果您需要链接hdf5或在运行时也需要它的二进制文件,您将在DEPENDS中同时拥有hdf5-nativehdf5

I ended up by doing this:我最终这样做了:

do_configure_prepend() {
  cp ${WORKDIR}/recipe-sysroot-native/usr/bin/h5* ${WORKDIR}/recipe-sysroot/usr/bin/
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM