linux - 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_sysroot
(https://docs.yoctoproject.org/singleindex.html#ref-tasks-prepare-recipe-sysroot)有关吗?
谢谢
解决方案
要在目标上运行的二进制文件不是 sysroot 的一部分,因为 sysroot 仅用于构建时依赖项,并且目标二进制文件不能在构建时使用。SYSROOT_DIRS
指定在 sysroot 中安装哪些文件/目录(参见https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS)。
如果hdf5
应该在构建时执行,则需要DEPENDS
onhdf5-native
以便为主机架构构建的二进制文件可以在构建时运行。SYSROOT_DIRS_NATIVE
指定哪些文件/目录安装在 sysroot-native 中(针对主机架构编译;参见https://docs.yoctoproject.org/ref-manual/variables.html#term-SYSROOT_DIRS_NATIVE)。如果您需要hdf5
在运行时链接或需要它的二进制文件,您将同时拥有hdf5-native
和hdf5
in DEPENDS
。
推荐阅读
- laravel - Laravel:电子邮件未发送
- amazon-web-services - 已验证发送的域我如何验证它以在 AWS SES 中接收
- firebase - 关于扩展 Firebase 后端的问题
- c# - 使用 VLC 流式传输图像或桌面屏幕(LibVLCSharp for WPF)
- c# - 实现 IAsyncEnumerable 的空 IQueryable
- react-native - 通过 React Native 的 Axios 发布调用会导致云 url 的网络错误适用于 ios 而不适用于 android
- postgresql - 致命:用户“postgres”的密码验证失败。无法连接
- html - 大写后的文本小写是可能的吗?
- django - 如何在投票系统的 Django 数据库中增加投票字段
- php - 如何在 Laravel 中更新数据库记录