【问题标题】:libcurl.so.4: cannot open shared object file: No such file or directorylibcurl.so.4:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2018-11-17 09:52:38
【问题描述】:

我正在通过 compilation 链接在 Ubuntu 14.04 上创建 s3fs-fuse 的二进制文件。在某些系统中,在 kubernetes pod 上执行挂载操作时出现以下错误

      ----     ------                 ----             ----                   -------
  Normal   Scheduled              5h               default-scheduler      Successfully assigned verifypod5 to 10.171.42.29
  Normal   SuccessfulMountVolume  5h               kubelet, 10.171.42.29  MountVolume.SetUp succeeded for volume "default-token-scrsz"
  Warning  FailedMount            5h (x8 over 5h)  kubelet, 10.171.42.29  MountVolume.SetUp failed for volume "pvc-f2d4cacc-6a51-11e8-b133-fa53da29538e" : mount command failed, status: Failure, reason: Error mounting volume: s3fs mount failed: s3fs: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

我看到二进制文件正在使用libcurl-gnutls.so.4,但我觉得我们需要 openssl 一个。

ldd /usr/local/bin/s3fs
linux-vdso.so.1 =>  (0x00007ffc3d1cb000)
libfuse.so.2 => /lib/x86_64-linux-gnu/libfuse.so.2 (0x00007fb0fd742000)
libcurl-gnutls.so.4 => /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 (0x00007fb0fd4d5000)
libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007fb0fd11a000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fb0fccd6000)

所以从我构建二进制文件的系统来看,我在下面看到

    dpkg -l | grep curl
ii  curl                                7.47.0-1ubuntu2.8                          amd64        command line tool for transferring data with URL syntax
ii  libcurl3:amd64                      7.47.0-1ubuntu2.8                          amd64        easy-to-use client-side URL transfer library (OpenSSL flavour)
ii  libcurl3-gnutls:amd64               7.47.0-1ubuntu2.8                          amd64        easy-to-use client-side URL transfer library (GnuTLS flavour)
ii  libcurl4-openssl-dev:amd64          7.47.0-1ubuntu2.8                          amd64        development files and documentation for libcurl (OpenSSL flavour)

所以二进制文件选择 libcurl3-gnutls:amd64 而不是 libcurl4-openssl-dev:amd64 。我怎样才能改变这种行为。

【问题讨论】:

    标签: libcurl s3fs


    【解决方案1】:

    请安装libcurl3 包。

    以后,如果您缺少某些文件,您可以使用https://packages.ubuntu.com 查找哪个包提供了您需要的文件。

    例如: https://packages.ubuntu.com/search?searchon=contents&keywords=libcurl.so.4&mode=filename&suite=xenial&arch=any

    【讨论】:

    • 好的。根据文档,我正在执行此步骤 sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
    • 上述解决了问题,但问题是,在实际场景中,我无法访问那些工作节点来安装libcurl13。这与我构建 fuse 二进制文件的方式或操作系统有关。 @matiit
    • 因为您正在为特定系统编译它,它链接的某些库可能在其他系统上不可用。这是 Linux 发行版中的常见问题。我认为最好的解决方案是为不同的系统提供单独的包。
    • 链接失效了,很遗憾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2018-11-26
    • 2019-11-27
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多