FFmpeg 超级分辨率:libtensorflow_framework 重新链接错误和 vaSyncBuffer 未定义符号

FFmpeg 超级分辨率:libtensorflow_framework 重新链接错误和 vaSyncBuffer 未定义符号

我正在尝试按照 Video Stackexchange 中的这个帖子使用 FFmpeg 实现超分辨率:FFmpeg 中的超分辨率过滤器如何工作?

系统 :

  1. Ubuntu 20.04
  2. Nvidia 510(已使用验证nvidia-smi
  3. CUDA 11.6(已使用 ( nvcc --version)验证
  4. CUDNN 8.4(安装方法及运行验证如下他们的官方网站
  5. Tensorflow 2.7.0(安装方法及运行验证如下他们的官方网站
  6. TensorRT(安装自pip3
  7. 安装zlib1gzlib1g-dev(通过apt-get

我必须使用 tensorflow 构建 ffmpeg,以下是教程中的完整设置:

./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libtensorflow \
  --enable-nonfree

错误 : 从源代码构建和安装 FFmpeg 时没有出现任何错误。但是,运行 FFmpeg(包括ffmpeg --version)会导致此错误:

ffmpeg: Relink `/usr/local/lib/libtensorflow_framework.so.2' with `/lib/x86_64-linux-gnu/libz.so.1' for IFUNC symbol `crc32_z'
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: vaSyncBuffer

看起来它与 tensorflow 有关,但是我已经验证了 tensorflow 在我的系统上正常运行。我在 Google 上找不到任何内容,只有一个线程讨论了完全相同的错误 (这里),但仍然没有解决方案。我知道错误与符号链接无关,但以防万一需要以下信息:

$ ls -l /usr/local/lib | grep "libtensor*"                          
lrwxrwxrwx   1 root    root           28 Apr 10 05:17 libtensorflow_framework.so -> libtensorflow_framework.so.2
lrwxrwxrwx   1 root    root           32 Apr 10 05:19 libtensorflow_framework.so.2 -> libtensorflow_framework.so.2.7.0
-r-xr-xr-x   1 root    root     38362936 Apr 10 05:14 libtensorflow_framework.so.2.7.0
lrwxrwxrwx   1 root    root           18 Apr 10 05:18 libtensorflow.so -> libtensorflow.so.2
lrwxrwxrwx   1 root    root           22 Apr 10 05:19 libtensorflow.so.2 -> libtensorflow.so.2.7.0
-r-xr-xr-x   1 root    root    784355912 Apr 10 05:14 libtensorflow.so.2.7.0

$ ldd /usr/local/lib/libtensorflow_framework.so.2                                                  
    linux-vdso.so.1 (0x00007ffdd598e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc9f93bd000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc9f926e000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc9f9264000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc9f9241000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc9f9027000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc9f900c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc9f8e18000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc9fb31a000)

$ ls -l /lib/x86_64-linux-gnu | grep "libz.*"                                     
lrwxrwxrwx 1 root root      14 Oct 15  2020 libz.so.1 -> libz.so.1.2.11
-rw-r--r-- 1 root root  108936 Oct 15  2020 libz.so.1.2.11

$ ldd /lib/x86_64-linux-gnu/libz.so.1                                            
    linux-vdso.so.1 (0x00007ffc693bf000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3935cfb000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3935f5c000) 

[更新]

错误 1 ​​已解决(请参阅下面的答案)。现在剩下的是错误 2:

$ ffmpeg --version
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: vaSyncBuffer

有什么建议吗?

答案1

修复错误 1:

ffmpeg: Relink `/usr/local/lib/libtensorflow_framework.so.2' with `/lib/x86_64-linux-gnu/libz.so.1' for IFUNC symbol `crc32_z'

我已经zlib1g通过安装了apt-get,我猜这是问题所在,因为它不是 FFmpeg 想要的版本。我关注的是这个问题经过一些修改:

  1. 查找有关符号链接的信息libz.so.1

    ls -ls /lib/x86_64-linux-gnu | grep "libz*"  
    0 lrwxrwxrwx 1 root root      14 Mar 27 01:21 libz.so.1 -> libz.so.1.2.11   
    116 -rw-r--r-- 1 root root  116960 Mar 27 01:21 libz.so.1.2.11
    
  2. 打开本网站并按照符号链接查找软件包(我的是libz.so.1.2.11)。我下载了所有软件包(其中 3 个:zlib1gzlib1g-devzlib1g-dbg)。

  3. 删除并清除已安装的和zlib1g,然后根据需要修复任何问题。zlib1g-devapt-get remove --purgesudo apt --fix-broken install

  4. 使用以下命令安装第 2 点中的 3 个包:sudo dpkg -i

  5. sudo ldconfig.

完成,错误 1 ​​已消失。

附言:如果您这样做,apt-get dist-upgrade系统会要求您升级zlib1g和/或zlib1g-dev,那么,不要升级它们,否则您将再次遇到此错误。我使用 阻止升级apt-mark hold

修复错误2:

$ ffmpeg --version
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: vaSyncBuffer
  1. libva*从机器中删除所有安装。

  2. 安装利瓦libva-实用程序来自英特尔 Github。libva特别是将安装在 FFmpeg 找不到的目录中。因此,在配置两者时,添加前缀/usr

    ./configure --prefix=/usr
    
  3. 重启。

不再有 vaSyncBuffer 错误。FFmpeg 设法找到libva

相关内容