Bad lib hace referencia a la creación de FFmpeg después de actualizar a 22.04

Bad lib hace referencia a la creación de FFmpeg después de actualizar a 22.04

Tengo una compilación de FFmpeg personalizada, con filtros personalizados, creada a partir de la rama maestra de FFmpeg. Está funcionando bien en 20.04, en varias máquinas. Sin embargo, cuando intenté ejecutarlo en mi máquina personal, actualizada del 20.04 al 22.04 hace unas semanas, recibí este error:

$ ./ffmpeg 
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory

La razón obvia para esto es la necesidad de recompilarlo usando nuevos encabezados de nuevos paquetes que apunten a nuevas versiones de las bibliotecas. Lo cual hice. Sin embargo, no importa cuántas veces lo recompilé, siempre termina buscando las mismas versiones antiguas de las bibliotecas.

Aquí hay una lista de bibliotecas que no funcionan en mi proceso de compilación:

$ 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

Todos ellos tienen instaladas versiones más recientes:

$ 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

Hasta ahora he probado:

  1. Obviamente reconfigure y vuelva a compilar.
  2. Eliminar todos los archivos binarios del directorio de compilación, además de buscar referencias codificadas directas a versiones de lib (que no encontré).
  3. Clonar el repositorio en un directorio limpio, con los mismos indicadores de configuración pero sin código personalizado.

En todos los casos, la compilación es exitosa, pero los archivos binarios tienen referencias a esas bibliotecas inexistentes. Mis indicadores de configuración son todos --enable-libstuffpara bibliotecas diferentes, como es normal cuando se configura alguna compilación, y no tienen control de versiones explícito.

No veo a nadie en línea que tenga este problema, así que supongo que tal vez sea algún problema local. Pero no entiendo qué podría ser, ya que no tengo esas versiones codificadas en ninguna parte.

Entonces, mi pregunta es:¿Qué podría estar afectando mi compilación en Ubuntu 22.04, que termina comportándose de esta manera?

Respuesta1

Para cualquiera que tenga este problema: fueron las bibliotecas compartidas en /usr/local/lib, creadas hace meses, antes de la actualización. Las compilaciones más nuevas compilaron todo bien, pero no las estaba ejecutando sudo make installpara implementar las bibliotecas compartidas más nuevas. Entonces, el ejecutable más nuevo intentaba utilizar las bibliotecas compartidas más antiguas, que a su vez apuntaban a bibliotecas que ahora no existen.

Caso cerrado.

Respuesta2

Tuve problemas con ffmpeg después de actualizar a Ubuntu 23.04 y tuve el problema libvpx.so.6.

apt-cachesolo muestra 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)

Para encontrar las debs más antiguas, simplemente fui a la búsqueda de paquetes de Debian, por ejemplo

https://packages.debian.org/search?keywords=libvpx&searchon=names

Aquí muestra un montón de cosas antiguas:

ingrese la descripción de la imagen aquí

Descubrí que la mayoría de mis dependencias son parte de bullseye, así que simplemente haga clic en el enlace diana/estable, luego haga clic en, por ejemplo, amd64 (o cualquiera que sea su arquitectura):

ingrese la descripción de la imagen aquí

Luego haga clic en un espejo, por ejemplohttp.us.debian.org/debian

Una vez descargado, instálelo con:

sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb

Otros que tuve que hacer:

  • libdav1d4
  • libx264-160
  • libx265-192

... finalmente ffmpeg -codecsse ejecutó con algún resultado.

(Ah, y entonces Firefox también podría empezar a reproducir TODOS los vídeos de Youtube, no sóloalgunode ellos.)

información relacionada