我有几个商业应用程序依赖于 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 中,不应在系统版本之前解决。
底层库
libharfbuzz0b
包含在 Bitwig 特定文件夹中:/opt/bitwig-studio/lib
但是他们的构建没有导出符号。由于某种原因,程序范围的 .so 文件会覆盖系统共享对象,从而导致此问题。我通过运行跟踪库的依赖项:
这表明在预期的位置有适当的文件。跑步:
表明它应该在那里。我通过运行 locate 来查找问题的任何实例
libharfbuzz
显示该文件实际上是直接包含在 Bitwig 中的。
readelf -s /opt/bitwig-studio/lib/bitwig-studio/libharfbuzz.so.0
未定义运行符号。