FFMPEG,未定义符号 hb_glib_script_to_script

FFMPEG,未定义符号 hb_glib_script_to_script

我有几个商业应用程序依赖于 FFMPEG 或子依赖项 libpango 以及其他可能依赖项。其中一个软件包在我的系统上出现故障,因为 FFMPEG 或 libpango 的版本和编译选项现在与 Ubuntu 原版不同。我不确定哪些程序依赖 FFMPEG 或 libpango 作为依赖项,或者如何找出使用的版本。

原始错误:

ffmpeg: symbol lookup error: /lib/x86_64-linux-gnu/libpango-1.0.so.0: undefined symbol: hb_glib_script_to_script

如果我检查 libpango 是否有该符号,我会发现它没有:

> readelf -a /lib/x86_64-linux-gnu/libpango-1.0.so.0 | grep hb_glib_script_to_script
    85: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND hb_glib_script_to_script

我检查了其他位置,例如 /usr/local 和 ~/.snap/*,libpango 的那些实例也将该符号列为未定义。

我想知道某个软件包是否可能包含冲突的库版本,而该版本可能会被覆盖。但我没有看到任何迹象。

> apt-cache rdepends --installed ffmpeg
ffmpeg
Reverse Depends:
  bitwig-studio
    ffmpeg:i386
  imagemagick-6.q16
    ffmpeg:i386
  imagemagick-6.q16
    ffmpeg:i386

检查符号错误时,我遇到了以下问题: https://unix.stackexchange.com/questions/599152/debian-libpangoft2-1-0-so-0-undefined-symbol-hb-glib-script-from-script

它建议重新安装libharfbuzz0b 应该提供符号的底层库。我重新安装了它:

> sudo apt update && sudo apt reinstall libharfbuzz

我仍然收到此错误。

然后我检查了 FFMPEG 是否有多个实例,结果没有。libpango 有多个副本,但重复项位于 ~/.snap 中,在系统版本之前不应解析。

答案1

底层库libharfbuzz0b包含在 Bitwig 特定文件夹中:/opt/bitwig-studio/lib,但是它们的构建未导出符号。由于某种原因,程序范围的 .so 文件覆盖了系统共享对象,从而导致了此问题。

我通过运行以下命令来追踪该库的依赖关系:

ldd /lib/x86_64-linux-gnu/libpango-1.0.so.0

这表明在预期位置有适当的文件。运行:

> readelf -s /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 | grep hb_glib_script_to_script
   439: 00000000000cdff0     9 FUNC    GLOBAL DEFAULT   14 hb_glib_script_to_script

显示它应该在那里。我通过运行locate来查找任何实例来追踪问题libharfbuzz

> locate libharfbuzz | grep .so
/usr/lib/x86_64-linux-gnu/libharfbuzz.so.0
/usr/lib/x86_64-linux-gnu/libharfbuzz.so.0.20600.4
/opt/bitwig-studio/lib/bitwig-studio/libharfbuzz.so.0
/opt/bitwig-studio/lib/jre/lib/libharfbuzz.so

显示该文件实际上直接包含在 Bitwig 中。运行readelf -s /opt/bitwig-studio/lib/bitwig-studio/libharfbuzz.so.0符号未定义。

相关内容