У меня есть пользовательская сборка 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
На данный момент я попробовал:
- Очевидно, придется перенастроить и перекомпилировать.
- Удаляю все двоичные файлы из каталога сборки, а также ищу прямые жестко закодированные ссылки на версии библиотек (которых я не нашел).
- Клонирование репозитория в чистый каталог с теми же флагами конфигурации, но без пользовательского кода.
Во всех случаях сборка проходит успешно, но двоичные файлы содержат ссылки на эти несуществующие библиотеки. Мои флаги конфигурации все --enable-libstuff
для разных библиотек, как это обычно бывает при настройке какой-либо сборки, и не имеют явного версионирования.
Я не вижу, чтобы кто-то в сети имел такую проблему, так что я предполагаю, что это какая-то локальная проблема. Но я не понимаю, что это может быть, так как у меня нигде не прописаны эти версии.
Итак, мой вопрос:что может влиять на мою сборку в Ubuntu 22.04, из-за чего она ведет себя таким образом?
решение1
Для тех, у кого возникла эта проблема: это были общие библиотеки в /usr/local/lib
, собранные несколько месяцев назад, до обновления. Более новые компиляции действительно собирали все нормально, но я не запускал, sudo make install
чтобы развернуть новые общие библиотеки. Таким образом, более новый исполняемый файл пытался использовать старые общие библиотеки, которые в свою очередь действительно указывали на теперь несуществующие библиотеки.
Дело закрыто.
решение2
У меня возникли проблемы с ffmpeg после обновления до Ubuntu 23.04, а также проблема с 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, а не тольконекоторыйиз них.)