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. ビルド ディレクトリからすべてのバイナリを削除し、ライブラリ バージョンへの直接ハードコードされた参照を検索します (見つかりませんでした)。
  3. 同じ構成フラグを持ち、カスタム コードなしで、クリーンなディレクトリにリポジトリを複製します。

いずれの場合も、ビルドは成功しますが、バイナリ ファイルには存在しないライブラリへの参照があります。--enable-libstuffビルドを設定するときに通常行われるように、私の構成フラグはすべて異なるライブラリ用であり、明示的なバージョン管理はありません。

オンラインでこの問題を抱えている人を見かけないので、ローカルの問題なのかもしれません。しかし、それらのバージョンをどこにもハードコードしていないので、何が原因なのかわかりません。

そこで私の質問は次のとおりです。Ubuntu 22.04 でのビルドに何が影響して、このような動作になるのでしょうか?

答え1

この問題に遭遇した方へ: この問題の原因は/usr/local/lib、更新前の数か月前にビルドされた の共有ライブラリでした。新しいコンパイルではすべて正常にビルドされましたが、sudo make install新しい共有ライブラリを展開するために を実行していませんでした。そのため、新しい実行ファイルは古い共有ライブラリを使用しようとしましたが、その古い共有ライブラリは実際には現在は存在しないライブラリを指していました。

事件は解決しました。

答え2

Ubuntu 23.04 にアップグレードした後、ffmpeg の問題が発生し、libvpx.so.6 の問題が発生しました。

apt-cachev7のみを表示します:

$ 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)

古いdebsを見つけるには、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の動画だけでなく、すべての動画を再生できるようになる。いくつかのそのうちの。)

関連情報