在 Ubuntu 19 上使用 FFMPEG 运行私有应用程序时出现问题

在 Ubuntu 19 上使用 FFMPEG 运行私有应用程序时出现问题

运行应用程序时我遇到以下错误:

./Application: /lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54: version `LIBAVUTIL_FFMPEG_54' not found (required by /usr/local/lib/libopencv_videoio.so.3.3)
./Application: /lib/x86_64-linux-gnu/libswscale-ffmpeg.so.3: version `LIBSWSCALE_FFMPEG_3' not found (required by /usr/local/lib/libopencv_videoio.so.3.3)
./Application: /lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56: version `LIBAVCODEC_FFMPEG_56' not found (required by /usr/local/lib/libopencv_videoio.so.3.3)
./Application: /lib/x86_64-linux-gnu/libavformat-ffmpeg.so.56: version `LIBAVFORMAT_FFMPEG_56' not found (required by /usr/local/lib/libopencv_videoio.so.3.3)

ffmpeg

ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8 (Ubuntu 8.3.0-6ubuntu1)
  configuration: --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

ldd $(which ffmpeg) 似乎没问题:

linux-vdso.so.1 (0x00007ffc726da000)
libavdevice.so.58 => /usr/local/lib/libavdevice.so.58 (0x00007feed0645000)
libavfilter.so.7 => /usr/local/lib/libavfilter.so.7 (0x00007feed0374000)
libavformat.so.58 => /usr/local/lib/libavformat.so.58 (0x00007feed012a000)
libavcodec.so.58 => /usr/local/lib/libavcodec.so.58 (0x00007feecec71000)
libswresample.so.3 => /usr/local/lib/libswresample.so.3 (0x00007feecec53000)
libswscale.so.5 => /usr/local/lib/libswscale.so.5 (0x00007feecebc7000)
libavutil.so.56 => /usr/local/lib/libavutil.so.56 (0x00007feeceabd000)
libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007feece96f000)
libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feece94e000)
libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007feece763000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007feece73a000)
libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007feece735000)
libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007feece72e000)
libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007feece724000)
libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x00007feece708000)
liblzma.so.5 => /usr/lib/x86_64-linux-gnu/liblzma.so.5 (0x00007feece6e1000)
/lib64/ld-linux-x86-64.so.2 (0x00007feed06ca000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007feece4dd000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007feece2d5000)
libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007feece2bb000)
librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x00007feece2b0000)

有人知道如何解决这个问题吗?

答案1

您的应用程序已经旧了,正在寻找真正旧的 FFmpeg 版本。

问题:

  • 应用程序正在错误的位置查找.so文件。您的应用程序正在寻找/lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54等,但您的 FFmpeg 可能仅提供/usr/local/lib/libavutil.so.56
  • 应用程序正在寻找错误的名称。libavutil-ffmpeg是旧版 Ubuntu 中的 ffmpeg 包使用的旧命名方案。
  • 应用程序需要较旧的 FFmpeg 版本。5456代表每个 FFmpeg 库的主要版本。主要版本彼此之间不兼容 API。根据您的主要版本号,应用程序看起来像是为 FFmpeg 2.8 发布分支编写的。这非常旧。您编译并安装了 FFmpeg 4.2。请更新应用程序代码以使用 FFmpeg 4.2 发布分支,或安装 FFmpeg 2.8。

答案2

谢谢@llogan!正如你解释的那样。

解决方案:我删除了所有旧库,并从 Ubuntu 存储库下载了所需 .lib 的每个 .deb 包并手动安装它们。

相关内容