【问题标题】:Installing a precompiled library that depends on another in a bitbake recipe在 bitbake 配方中安装依赖于另一个的预编译库
【发布时间】:2019-08-27 07:25:11
【问题描述】:

我正在尝试在我们基于 Yocto 的发行版中包含 pytorch/libtorch,但在将具有依赖关系的预编译库安装到目标上时遇到了麻烦。

在尝试从源代码to no avail 编译pytorch 之后,我想我可以使用pre-compiled shared libraries 并继续下一个问题。然而,事实证明这比最初预期的要困难得多。

具体来说,我要安装的共享库之一libtorch.so 依赖于沿它分发的另一个共享库libgomp-753e6e92.so.1。当运行ldd 时,它看起来像这样:

$ ldd libtorch.so 
    linux-vdso.so.1 (0x00007ffc27bcb000)
    libgomp-753e6e92.so.1 => /home/user/Desktop/libtorch-1.2.0/libtorch/lib/./libgomp-753e6e92.so.1 (0x00007f3052954000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3052735000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f305252d000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3052315000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3052111000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3051d73000)
    libc10.so => /home/user/Desktop/libtorch-1.2.0/libtorch/lib/./libc10.so (0x00007f3051b2c000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f30517a3000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f30513b2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f305ef4a000)

尝试将所有内容都放在适当位置的 bitbake 配方如下所示:

SUMMARY = "Facebook PyTorch AI"
DESCRIPTION = "Facebook PyTorch AI"
HOMEPAGE = "https://pytorch.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=acf4d595f99e159bf31797aa872aef57"

S = "${WORKDIR}/libtorch"
LOCAL_INCLUDE = "${S}/include"
LOCAL_LIB = "${S}/lib"
TARGET_INCLUDE = "${D}${includedir}"
TARGET_LIB = "${D}${libdir}"

SRC_URI = "\
    https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-${PV}.zip \
    file://LICENSE \
"
SRC_URI[md5sum] = "f34c5b6e46331f79100cd93522bad3ae"

INSANE_SKIP_${PN} = "ldflags"
INSANE_SKIP_${PN} += "already-stripped"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_SYSROOT_STRIP = "1"
SOLIBS = ".so"
FILES_SOLIBSDEV = ""

# RDEPENDS_${PN} += "libgomp"

do_install() {
    # Create include directory
    install -d ${TARGET_INCLUDE}
    # Copy all header files
    cp -R --no-dereference --preserve=mode,links -v ${LOCAL_INCLUDE}/* ${TARGET_INCLUDE}

    # Create library directory
    install -d ${TARGET_LIB}
    # Install shared libraries
    install -m 0755 ${LOCAL_LIB}/*.so* ${TARGET_LIB}
}

FILES_${PN} += "\
    ${includedir}/* \
    ${libdir}/* \
"

不幸的是,我不断收到一条错误消息,告诉我libtorch 所需的libgomp 库没有rproviding。 我尝试了多种方法,包括将有问题的库放在自己的配方中,显式安装它或使用已经提供的 libgomp 运行时依赖项,但到目前为止没有任何运气。错误总是类似于:

ERROR: pytorch-1.2.0-r0 do_package_qa: QA Issue: /usr/lib/libtorch.so contained in package pytorch requires libgomp-753e6e92.so.1(GOMP_4.0)(64bit), but no providers found in RDEPENDS_pytorch? [file-rdeps]
ERROR: pytorch-1.2.0-r0 do_package_qa: QA Issue: /usr/lib/libtorch.so contained in package pytorch requires libgomp-753e6e92.so.1(OMP_1.0)(64bit), but no providers found in RDEPENDS_pytorch? [file-rdeps]
ERROR: pytorch-1.2.0-r0 do_package_qa: QA Issue: /usr/lib/libtorch.so contained in package pytorch requires libgomp-753e6e92.so.1()(64bit), but no providers found in RDEPENDS_pytorch? [file-rdeps]
ERROR: pytorch-1.2.0-r0 do_package_qa: QA Issue: /usr/lib/libtorch.so contained in package pytorch requires libgomp-753e6e92.so.1(GOMP_1.0)(64bit), but no providers found in RDEPENDS_pytorch? [file-rdeps]
ERROR: pytorch-1.2.0-r0 do_package_qa: QA run found fatal errors. Please consider fixing them.
ERROR: pytorch-1.2.0-r0 do_package_qa: Function failed: do_package_qa

关于我缺少什么的任何线索?

【问题讨论】:

    标签: shared-libraries pytorch yocto bitbake precompiled


    【解决方案1】:

    由于缺乏更好的解决方案,我们从源代码编译了自己的libtorch,同时将USE_OPENMP 环境变量设置为OFF。我们仍然无法确定为什么这种对版本化库的依赖会给我们带来这么多麻烦。

    【讨论】:

      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2014-05-27
      • 2015-04-18
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多