На моем довольно старом ноутбуке, работающем 16.04, каждый раз, когда я пытаюсь использовать ffmpeg, я получаю следующую ошибку:
$ ffmpeg
ffmpeg: error while loading shared libraries: libcudart.so.5.5: cannot open shared object file: No such file or directory
ffmpeg раньше хорошо работал и повредился в какой-то момент. Я не могу быть уверен точно, когда, но это, возможно, хорошо было, когда я обновил от 14,04 до 16,04.
Выполнение ldd подтверждает, что эта библиотека (библиотека времени выполнения CUDA) отсутствует, но все остальное прекрасно:
$ ldd /usr/bin/ffmpeg | grep libcudart
libcudart.so.5.5 => not found
Я абсолютно уверен, что файл (libcudart5.5) не существует нигде в моей системе (я попробовал, 'находят' и т.д.), или действительно любая другая версия libcudart. Самой близкой вещью в repo к тому, в чем я нуждаюсь, является libcudart7.5, более поздняя версия. Но это приходит с обновлением драйвера Nvidia (nvidia-367) как зависимость, которую я нашел, несколько раз теперь заправляет целую систему (из-за видеокарты, являющейся немного устаревшим, я думаю).
Так же в основном я смущен относительно того, почему ffmpeg пытается связаться с libcudart5.5 во-первых. Конечно, должно быть возможно выполнить ffmpeg, не нуждаясь в поддержке GPU? На самом деле я знаю, что это - потому что на другом компьютере я использую выполнение 16.04, ldd не показывает зависимости ни от какой версии libcudart, и ffmpeg работает просто великолепно. Версия ffmpeg пакета является тем же в обоих случаях:
$ dpkg -s ffmpeg | grep Version
Version: 7:2.8.11-0ubuntu0.16.04.1
Итак, почему это ищет его на моем ноутбуке? Я попытался произвести чистку ffmpeg и переустановить его несколько раз без удачи. Одна вещь, которая кажется релевантной, состояла в том, что я нашел a residual-config
запись для пакета, названного libcudart5.5, установлена в моей системе. Я действительно не знаю то, что это означает, но после удаления его и переустанавливающий ffmpeg, это не имело значения. Могло бы также быть важно, что однажды (под 14,04) я имел полный CUDA sdk установленный, но затем полностью удалил его, и не хотят переустанавливать его.
Я был бы очень признателен за любую справку, потому что я действительно хотел бы использовать ffmpeg на своем ноутбуке для видео преобразования, и это прослушивало меня некоторое время теперь.
Спасибо!
Я отвечаю на свой собственный вопрос после некоторого расследования, вдохновленного комментарием Риджи по первоначальному вопросу (спасибо!). Я начал исследовать, есть ли в какой-либо другой библиотеке, используемой ffmpeg, libcudart в качестве зависимости. Инструмент lddtree
из пакета pax-utils
действительно полезен для этого, так как он дает вам иерархический список зависимостей компоновщика, а не плоский список. Э.Г.
$ lddtree /usr/bin/ffmpeg
Используя это, я обнаружил, что libcudart.so.5.5
был зависимостью компоновщика от libopencv_core.so.2.4
, который оставался лежать в /usr/local/lib
некоторое время назад, когда я компилировал OpenCV 2.4 из исходного кода, и никогда не очищался, когда новый версия (версия 3.0) пришла вместе.
Чтобы исправить это, я удалил ffmpeg
и все opencv
пакеты, используя apt, затем вручную удалил оставшиеся файлы opencv 2.4 в /usr/local/lib
, используя
$ sudo rm /usr/local/lib/libopencv_*.so.2.4*
Затем переустановил ffmpeg из репо и сейчас все хорошо.
Это выглядит как довольно специфический набор обстоятельств, которые могут не относиться к другим, но, возможно, этот ответ может быть полезен для других с похожими проблемами.
У меня была похожая проблема. И я решил ее, удалив все экземпляры opencv и ffmpeg, удалив ffmpeg, а затем снова установив:
sudo find / -name "*opencv*" -exec rm -R {} \;
sudo find / -name "*ffmpeg*" -exec rm -R {} \;
sudo apt-get install ffmpeg
Выполненный ffmpeg
видеть, что отсутствует. Попытайтесь найти, где libopencv_core.so.2.4
(или любой файл это отсутствует). Например:
find / -name "*libopencv_core.so*"
и если Вы находите, что это в некотором каталоге копирует его в /usr/lib/
:
sudo cp /path-where-you-found-it/ /usr/lib/
Наконец выполненный снова ffmpeg
.
Если все будет в порядке, то это покажет варианты справки для него.