无法构建,因为配方 sysroot 中缺少依赖项 - yocto

Posted

技术标签:

【中文标题】无法构建,因为配方 sysroot 中缺少依赖项 - yocto【英文标题】:Unable to build as dependencies are missing in recipe-sysroot - yocto 【发布时间】:2020-07-14 05:37:49 【问题描述】:

我正在尝试使用 Yocto (Rocko) 为我的 64 位 Armv8-A 构建 mxnet 1.6.0。 首先,我从https://downloads.apache.org/incubator/mxnet/1.6.0/ 下载了mxnet。 我将下载的 tar 保存在其中一层的文件夹中。我已将该 tar 文件包含在我的 mxnet.bb 文件中,如下所示。

mxnet.bb

SUMMARY = "MXNET Package"
SECTION = "libs"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://$COMMON_LICENSE_DIR/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

PN = 'mxnet'
PV = '1.6.0'

DEPENDS = "openblas opencv gtest gperftools"

SRC_URI := " \
    file://apache-mxnet-src-1.6.0-incubating.tar.gz"

SRC_URI[md5sum] = "76802d6b14cd45c27f063b2bba3c9a14"

S := "$WORKDIR/apache-$PN-src-$PV-incubating"

inherit cmake pkgconfig

OECMAKE_GENERATOR = "Unix Makefiles"

EXTRA_OECMAKE += " -DUSE_SSE=OFF \
-DUSE_CUDA=OFF \
-DUSE_OPENCV=ON \
-DUSE_OPENMP=ON \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_SIGNAL_HANDLER=ON \
-DUSE_LAPACK=OFF"
然后我使用 bitbake mnxet 命令构建了它。 我收到以下错误。

错误:

 -- Detecting CXX compiler ABI info
| -- Detecting CXX compiler ABI info - done
| -- Detecting CXX compile features
| -- Detecting CXX compile features - done
| -- CMAKE_CROSSCOMPILING TRUE
| -- CMAKE_HOST_SYSTEM_PROCESSOR x86_64
| -- CMAKE_SYSTEM_PROCESSOR aarch64
| -- CMAKE_SYSTEM_NAME Linux
| -- CMake version '3.14.1' using generator 'Unix Makefiles'
| -- Performing Test SUPPORT_CXX11
| -- Performing Test SUPPORT_CXX11 - Success
| -- Performing Test SUPPORT_CXX0X
| -- Performing Test SUPPORT_CXX0X - Success
| -- Determining F16C support
| -- Performing Test COMPILER_SUPPORT_MF16C
| -- Performing Test COMPILER_SUPPORT_MF16C - Failed
| -- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
| -- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
| CMake Error at cmake/Modules/FindOpenBLAS.cmake:82 (MESSAGE):
|   Could not find OpenBLAS
| Call Stack (most recent call first):
|   cmake/ChooseBlas.cmake:42 (find_package)
|   CMakeLists.txt:310 (include)
| 
| 
| -- Configuring incomplete, errors occurred!
我检查了build/tmp/work/aarch64-poky-linux/openblas/0.3.5-r0/image/opt/openblas/lib 并找到了.so 和.a 文件。 我注意到在 build/tmp/work/aarch64-poky-linux/mxnet/1.6.0-r0/recipe-sysroot/lib64, 没有 libopenblas.so 或 openblas 文件夹。 我也查了build/tmp/sysroots-components/aarch64/openblas 发现里面只有sysroot-providers,没有opt/openblas/lib或任何opt或lib文件夹(如上所述,我在openblas的图像文件夹中找不到文件)。

那么,问题是,如何在 mxnet 中将 openblas 添加到我的 recipe-sysroot 中?这样它就不应该抛出找不到openblas错误?

附言只有当我的 .so 文件存在于 /opt/openblas/lib 路径中时,我才能构建 openblas。否则,如果我尝试将 .so 文件放在 /lib 文件夹中,它会给我一个 Files/directories were installed but not shipped in any package 错误。

【问题讨论】:

【参考方案1】:

你可以尝试添加

FILES_$PN = "$libdir/libmxnet.so"

到食谱。

【讨论】:

我的构建甚至没有到do_package。错误在do_compile 阶段,似乎无法找到openblas。当我从源代码执行 cmake 时,我能够通过将 /opt/openblas/lib/* 处理到 /usr/lib64/opt/openblas/include/*/usr/include 来解决这个问题

以上是关于无法构建,因为配方 sysroot 中缺少依赖项 - yocto的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 构建错误:相机插件缺少 android.support.v4 库依赖项

构建输出中未包含依赖项的依赖项

构建 Swift 框架测试失败

如何修复 python 缺少的依赖项 - Homebrew

是否可以选择让介子安装缺少的依赖项? (对于我的 GNOME 日历构建。)

Intellij 错误:无法构建工件“XXX:战争爆炸”,因为它包含在循环依赖项中