it-swarm.com.de

Fehler bei gemeinsam genutzten Bibliotheken: FFMPEG

Auf meinem ziemlich alten Laptop mit 16.04 wird bei jedem Versuch, ffmpeg zu verwenden, die folgende Fehlermeldung angezeigt:

$ ffmpeg
ffmpeg: error while loading shared libraries: libcudart.so.5.5: cannot open shared object file: No such file or directory

ffmpeg hat früher gut funktioniert und ist irgendwann kaputt gegangen. Ich kann nicht genau sagen, wann, aber es könnte sein, dass ich von 14.04 auf 16.04 upgegradet habe.

Das Ausführen von ldd bestätigt, dass diese Bibliothek (die CUDA-Laufzeitbibliothek) fehlt, aber alles andere ist in Ordnung:

$ ldd /usr/bin/ffmpeg | grep libcudart
libcudart.so.5.5 => not found

Ich bin mir ziemlich sicher, dass die Datei (libcudart5.5) nirgendwo auf meinem System existiert (ich habe versucht, etwas zu finden usw.), oder in der Tat irgendeine andere Version von libcudart. Das Repo, das mir am nächsten kommt, ist libcudart7.5, eine spätere Version. Dies geht jedoch mit einem Upgrade des NVIDIA-Treibers (NVIDIA-367) einher, da ich mehrmals festgestellt habe, dass das gesamte System jetzt voll ist (da die Grafikkarte meiner Meinung nach etwas veraltet ist).

Im Grunde bin ich verwirrt, warum ffmpeg überhaupt versucht, auf libcudart5.5 zu verlinken. Sicherlich sollte es möglich sein, ffmpeg ohne GPU-Unterstützung auszuführen? Tatsächlich weiß ich , dass es daran liegt, dass auf einem anderen Computer, auf dem 16.04 ausgeführt wird, ldd keine Abhängigkeit von einer beliebigen Version von libcudart aufweist und ffmpeg einwandfrei funktioniert. Die Version des ffmpeg-Pakets ist in beiden Fällen dieselbe:

$ dpkg -s ffmpeg | grep Version
Version: 7:2.8.11-0ubuntu0.16.04.1

Warum sucht es auf meinem Laptop danach? Ich habe versucht, ffmpeg zu bereinigen und es mehrere Male ohne Glück neu zu installieren. Eine Sache, die relevant zu sein scheint, war, dass ich einen residual-config -Eintrag für ein Paket namens libcudart5.5 gefunden habe, das auf meinem System installiert ist. Ich weiß nicht genau, was das bedeutet, aber nachdem ich es entfernt und ffmpeg neu installiert habe, hat es keinen Unterschied gemacht. Es könnte auch relevant sein, dass ich in einer Phase (unter 14.04) die vollständige CUDA-SDK installiert hatte, sie dann jedoch vollständig entfernte und sie nicht erneut installieren wollte.

Ich würde mich über jede Hilfe sehr freuen, denn ich möchte ffmpeg auf meinem Laptop für die Videokonvertierung verwenden, und das nervt mich jetzt schon eine Weile.

Vielen Dank!

5
C Bridge

Ich beantworte meine eigene Frage nach einer Untersuchung, die von Ridgys Kommentar zur ursprünglichen Frage inspiriert wurde (danke!). Ich begann zu untersuchen, ob eine andere von ffmpeg verwendete Bibliothek libcudart als Abhängigkeit hatte. Das Tool lddtree aus dem Paket pax-utils ist hierfür sehr hilfreich, da es Ihnen eine hierarchische Liste der Linker-Abhängigkeiten und keine flache Liste bietet. Z.B.

$ lddtree /usr/bin/ffmpeg

Auf diese Weise entdeckte ich, dass libcudart.so.5.5 eine Linker-Abhängigkeit von libopencv_core.so.2.4 war, die in /usr/local/lib von einer Weile her herumlag, als ich OpenCV 2.4 aus dem Quellcode kompilierte und nie aufräumte, als das Neue erschien Version (Version 3.0) kam mit.

Um dies zu beheben, deinstallierte ich ffmpeg und alle opencv Pakete mit apt und löschte dann die restlichen opencv 2.4-Dateien in /usr/local/lib mit

$ Sudo rm /usr/local/lib/libopencv_*.so.2.4*

Dann neu installiert ffmpeg aus dem Repo und jetzt ist alles in Ordnung.

Dies scheint ein ziemlich spezifischer Satz von Umständen zu sein, der für andere möglicherweise nicht so relevant ist, aber vielleicht kann diese Antwort für andere mit ähnlichen Problemen nützlich sein.

6
C Bridge

Ich hatte ein ähnliches Problem und löste es, indem ich alle Instanzen von opencv und ffmpeg löschte, ffmpeg deinstallierte und es dann erneut installierte:

Sudo find / -name "*opencv*" -exec rm -R {} \; 
Sudo find / -name "*ffmpeg*" -exec rm -R {} \;
Sudo apt-get install ffmpeg
0
MGM

Führen Sie ffmpeg aus, um zu sehen, was fehlt. Versuchen Sie herauszufinden, wo sich libopencv_core.so.2.4 befindet (oder wo eine Datei fehlt). Zum Beispiel:

find / -name "*libopencv_core.so*"

und wenn Sie es in einem Verzeichnis finden, kopieren Sie es nach /usr/lib/:

Sudo cp /path-where-you-found-it/ /usr/lib/

Führen Sie schließlich erneut ffmpeg aus.

Wenn alles in Ordnung ist, werden Hilfemöglichkeiten angezeigt.

0
soylis