Ich habe einen benutzerdefinierten FFmpeg-Build mit benutzerdefinierten Filtern, der aus dem FFmpeg-Masterzweig erstellt wurde. Er funktioniert unter 20.04 auf mehreren Rechnern einwandfrei. Als ich jedoch versuchte, ihn auf meinem persönlichen Rechner auszuführen, der vor einigen Wochen von 20.04 auf 22.04 aktualisiert wurde, erhielt ich diesen Fehler:
$ ./ffmpeg
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory
Der offensichtliche Grund dafür ist, dass es mit neuen Headern aus neuen Paketen, die auf neue Versionen der Bibliotheken verweisen, neu kompiliert werden muss. Das habe ich getan. Doch egal, wie oft ich es neu kompiliere, es sucht immer wieder nach denselben alten Versionen der Bibliotheken.
Hier ist eine Liste der Bibliotheken, die in meinem Build-Prozess nicht funktionieren:
$ 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
Auf allen sind neuere Versionen installiert:
$ 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
Bisher habe ich Folgendes versucht:
- Natürlich neu konfigurieren und neu kompilieren.
- Löschen aller Binärdateien aus dem Build-Verzeichnis und Suchen nach direkten fest codierten Verweisen auf Bibliotheksversionen (die ich nicht gefunden habe).
- Klonen des Repo in einem sauberen Verzeichnis, mit denselben Konfigurationsflags, aber ohne benutzerdefinierten Code.
In allen Fällen ist der Build erfolgreich, aber die Binärdateien enthalten Verweise auf diese nicht vorhandenen Bibliotheken. Meine Konfigurationsflags sind alle --enable-libstuff
für unterschiedliche Bibliotheken, wie es beim Einrichten eines Builds üblich ist, und haben keine explizite Versionierung.
Ich sehe niemanden online, der dieses Problem hat, also nehme ich an, dass es sich vielleicht um ein lokales Problem handelt. Aber ich verstehe nicht, was es sein könnte, da ich diese Versionen nirgendwo fest codiert habe.
Meine Frage ist also:was könnte meinen Build in Ubuntu 22.04 beeinträchtigen, der sich am Ende so verhält?
Antwort1
Für alle, die dieses Problem haben: Es waren die gemeinsam genutzten Bibliotheken in /usr/local/lib
, die vor Monaten, vor dem Update, erstellt wurden. Die neueren Kompilierungen haben zwar alles problemlos erstellt, aber ich habe sie nicht ausgeführt, sudo make install
um die neueren gemeinsam genutzten Bibliotheken bereitzustellen. Die neuere ausführbare Datei hat also versucht, die älteren gemeinsam genutzten Bibliotheken zu verwenden, die wiederum tatsächlich auf jetzt nicht mehr vorhandene Bibliotheken verwiesen haben.
Fall abgeschlossen.
Antwort2
Ich hatte nach dem Upgrade auf Ubuntu 23.04 Probleme mit ffmpeg und das Problem mit libvpx.so.6.
apt-cache
zeigt nur 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)
Um die älteren Debs zu finden, habe ich einfach die Debian-Paketsuche aufgerufen, z. B.
https://packages.debian.org/search?keywords=libvpx&searchon=names
Hier ist eine Menge altes Zeug zu sehen:
Ich habe festgestellt, dass die meisten meiner Abhängigkeiten Teil von sind bullseye
. Klicken Sie also einfach auf den Bullseye/Stable-Link und dann beispielsweise auf amd64 (oder was auch immer Ihre Architektur ist):
Klicken Sie dann auf einen Spiegel, zBhttp.us.debian.org/debian
Nach dem Download installieren Sie mit:
sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb
Andere, die ich tun musste:
- libdav1d4
- libx264-160
- libx265-192
...das ffmpeg -codecs
lief schließlich mit einer Ausgabe.
(Oh, und dann könnte Firefox auch ALLE Videos auf Youtube abspielen, nicht nurmanchevon ihnen.)