我有一个自定义的 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
到目前为止,我已经尝试过:
- 显然要重新配置,重新编译。
- 从构建目录中删除所有二进制文件,并查找对 lib 版本的直接硬编码引用(我没有找到)。
- 在干净的目录中克隆 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 上的所有视频,而不仅仅是一些其中。