Плохие ссылки на библиотеки при сборке FFmpeg после обновления до 22.04

Плохие ссылки на библиотеки при сборке FFmpeg после обновления до 22.04

У меня есть пользовательская сборка 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

У меня возникли проблемы с 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, а не тольконекоторыйиз них.)

Связанный контент