升级至 22.04 后,构建 FFmpeg 时出现错误的库引用

升级至 22.04 后,构建 FFmpeg 时出现错误的库引用

我有一个自定义的 FFmpeg 版本,带有自定义过滤器,是从 FFmpeg 主分支构建的。它在 20.04 中的几台机器上运行良好。然而,当我尝试在几周前从 20.04 更新到 22.04 的个人机器上运行它时,我收到了这个错误:

$ ./ffmpeg 
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory

显而易见的原因是需要使用新软件包中的新标头来重新编译它,这些新标头指向新版本的库。我就是这么做的。然而,无论我重新编译了多少次,它总是会寻找相同的旧版本的库。

以下是我在构建过程中无法正常工作的库的列表:

$ ldd ./ffmpeg | grep not
    libvpx.so.6 => not found
    libwebp.so.6 => not found
    libcodec2.so.0.9 => not found
    libx264.so.155 => not found
    libx265.so.179 => not found

它们都安装了较新的版本:

$ find /usr/ -name "libvpx.so*" -or -name "libwebp.so*" -or -name "libcodec2.so*" -or -name "libx264.so*" -or -name "libx265.so*"  2>/dev/null
/usr/lib/i386-linux-gnu/libwebp.so.7.1.3
/usr/lib/i386-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.5
/usr/lib/x86_64-linux-gnu/libx264.so.163
/usr/lib/x86_64-linux-gnu/libcodec2.so
/usr/lib/x86_64-linux-gnu/libx265.so.79
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so.5.0.4
/usr/lib/x86_64-linux-gnu/x264-10bit/libx264.so.148
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0
/usr/lib/x86_64-linux-gnu/libcodec2.so.1.0
/usr/lib/x86_64-linux-gnu/libvpx.so.3
/usr/lib/x86_64-linux-gnu/libvpx.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.7.1.3
/usr/lib/x86_64-linux-gnu/libvpx.so
/usr/lib/x86_64-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libx265.so
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0
/usr/lib/x86_64-linux-gnu/libx265.so.199
/usr/lib/x86_64-linux-gnu/libx264.so
/usr/lib/x86_64-linux-gnu/libx264.so.148

到目前为止,我已经尝试过:

  1. 显然要重新配置,重新编译。
  2. 从构建目录中删除所有二进制文件,并查找对 lib 版本的直接硬编码引用(我没有找到)。
  3. 在干净的目录中克隆 repo,具有相同的配置标志但没有自定义代码。

在所有情况下,构建都成功了,但二进制文件引用了那些不存在的库。我的配置标志都是--enable-libstuff针对不同的库的,这在设置某些构建时很正常,并且没有明确的版本控制。

我在网上没看到有人遇到这个问题,所以我猜可能是本地问题。但我不明白这可能是什么原因,因为我没有在任何地方硬编码这些版本。

所以,我的问题是:什么会影响我在 Ubuntu 22.04 中的构建,最终导致这种情况?

答案1

/usr/local/lib对于遇到此问题的人:这是几个月前在更新之前构建的共享库。较新的编译确实构建了所有内容,但我没有运行sudo make install以部署较新的共享库。因此,较新的可执行文件试图使用较旧的共享库,而这反过来确实指向了现在不存在的库。

案件结案。

答案2

升级到 Ubuntu 23.04 后,我遇到了 ffmpeg 问题,并且遇到了 libvpx.so.6 问题。

apt-cache仅显示 v7:

$ apt-cache search libvpx
libvpx-dev - VP8 and VP9 video codec (development files)
libvpx-doc - VP8 and VP9 video codec (API documentation)
libvpx7 - VP8 and VP9 video codec (shared library)

为了找到较旧的 deb,我只需进入 debian 软件包搜索,例如

https://packages.debian.org/search?keywords=libvpx&searchon=names

这里展示了一堆旧东西:

在此处输入图片描述

我发现我的大多数依赖项都是 的一部分bullseye,因此只需单击 bullseye/stable 链接,然后单击例如 amd64(或任何您的架构):

在此处输入图片描述

然后点击镜像,例如http.us.debian.org/debian

下载后,使用以下命令安装:

sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb

我必须做的其他事情:

  • libdav1d4
  • libx264-160
  • libx265-192

...最终ffmpeg -codecs运行并有一些输出。

(哦,然后 Firefox 也可以播放 Youtube 上的所有视频,而不仅仅是一些其中。

相关内容