【问题标题】:libavcodec.so.56 not found when running software compiled with opencv运行用opencv编译的软件时找不到libavcodec.so.56
【发布时间】:2016-10-14 09:44:38
【问题描述】:

我刚刚将我的计算机升级到 Ubuntu 16.04。现在每次我尝试运行用opencv编译的软件时,都会出现以下错误:

libavcodec.so.56: cannot open shared object file: No such file or directory

环顾/usr/lib/x86_64-linux-gnu/,我可以找到libavcodec.so,但找不到libavcodec.so.56

当尝试运行 sudo apt-get install libavcodec56 时,我得到:

Package 'libavcodec56' has no installation candidate

我已经在互联网上搜索了答案,但目前找不到任何答案。任何解决这个烦人问题的帮助将不胜感激。

【问题讨论】:

    标签: opencv ubuntu libavcodec ubuntu-16.04


    【解决方案1】:

    FeRD 的评论让我解决了这个问题。 ffmpeg 是从源安装的,ld 路径设置不正确,pulseaudio 没有启动。 so lib 文件是双符号链接的:

    krzys@kLatitude-E6430:~$ ls -l /usr/lib/x86_64-linux-gnu/libavcodec.so
    lrwxrwxrwx 1 root root 20 sie 23  2018 /usr/lib/x86_64-linux-gnu/libavcodec.so -> libavcodec-ffmpeg.so
    
    
      krzys@kLatitude-E6430:~$ ls -l /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so
    lrwxrwxrwx 1 root root 30 sie 23  2018 /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so -> libavcodec-ffmpeg.so.56.60.100
    
    sudo ldconfig -vl /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56.60.100
    

    最后一个命令允许我设置符号链接,pulseaudio 守护程序开始运行。

    【讨论】:

      【解决方案2】:

      我将在这里发布我在为 python 安装 opencv 时如何在我的树莓派 3 中解决同样的问题,希望有人在同一时间。

      1) 通过以下命令确保您没有“python-opencv”以外的 opencv 版本。

      sudo dpkg --get-selections | grep cv3
      

      如果上面显示一个输出卸载它如下

      dpkg -r opencv3.1
      

      "opencv3.1" 应该换成你的版本。

      2) 然后按照以下步骤安装“python-opencv”

      sudo apt-get update
      sudo apt-get upgrade
      sudo apt-get install python-setuptools
      sudo apt-get install python-pip
      sudo apt-get install ipython python-opencv python-scipy python-numpy python-pygame
      

      this blog解释安装过程

      【讨论】:

        【解决方案3】:

        我遇到了类似的问题,我缺少指向 4 个共享库的版本符号链接,但拥有正确的 so 库。您可以自己创建缺少的版本符号链接:

        readelf -d libavcodec.so  | grep SONAME
        0x000000000000000e (SONAME)             Library soname: [libavcodec-ffmpeg.so.56]
        sudo ln -s libavcodec.so libavcodec.so.56
        

        【讨论】:

        • 你永远不应该自己管理库符号链接,而应该让ldconfig 去做。除非您手动安装它(不正确),否则libavcodec.so 也是一个符号链接(来自 ffmpeg 的开发包),所以您刚刚创建了一个符号链接的符号链接。你应该做的是ls -l libavcodec.so,这将显示你是符号链接指向(通常类似于libavcodec.so.56.60.100),然后运行sudo ldconfig -vl /path/to/libavcodec.so.56.60.100,这将重新创建@ 987654327@ 指向该文件的符号链接。
        【解决方案4】:

        只需输入以下内容即可安装 ffmpeg:

        sudo apt-get install -y ffmpeg
        

        你会得到这些文件:

        1. /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so
        2. /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56
          只需将/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56 复制到/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56

        【讨论】:

        • 您刚刚建议(在第 2 步中)将同一个文件复制到自身。我很好奇你认为那会完成什么。您可能的意思是“将/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56 复制到/usr/lib/x86_64-linux-gnu/libavcodec.so.56”,这可行,但我认为最好使用ln -s libavcodec-ffmpeg.so.56 libavcodec.so.56 创建符号链接。 (我在回复@solar-gy 时提到的关于不手动创建库符号链接的规则的一个例外,因为ldconfig 不处理指向不同名称的符号链接,只处理版本符号链接。)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-17
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        相关资源
        最近更新 更多