Pango-ERROR Harfbuzz 版本太旧

Pango-ERROR Harfbuzz 版本太旧

谷歌搜索,我发现使用 Pango 库的不同软件都会出现此错误。 潘戈是一个文本布局引擎库,可与哈夫巴兹用于显示多语言文本的整形引擎。

如果该软件是命令行工具,或者从终端启动,则错误如下所示:

:~$ sudo ah

(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)

Trace/breakpoint trap
:~$

如何修复这个错误?

提前致谢

答案1

很容易意识到我们面临着库版本之间的兼容性问题。

我们拿一个有这个问题的环境来看看解决方案:

  • 操作系统:Ubuntu 20.04(amd64)
  • 软件:Vectr 0.1.15(矢量图形编辑器)

在这种情况下,当尝试打开它时,什么也没有发生,它没有打开,但也没有显示错误,只有当尝试从终端 ( ./vectr) 启动 Vectr 时才会出现错误。

首先,我们来看看可能导致错误的依赖关系:

:~/Downloads/Vectr$ ldd vectr | grep pango

libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f4ab3581000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f4ab33e7000)
libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f4ab1b3b000)

这可以通过不同的方式完成,只需询问 Google。

如果您想查看已安装的库的详细信息,可以使用下一个命令。请注意,第二列表示版本:

:~/Downloads/Vectr$ dpkg -l | grep libpango

ii  libpango-1.0-0:amd64                       1.44.7-2ubuntu4                        amd64        Layout and rendering of internationalized text
ii  libpango-1.0-0:i386                        1.44.7-2ubuntu4                        i386         Layout and rendering of internationalized text
ii  libpangocairo-1.0-0:amd64                  1.44.7-2ubuntu4                        amd64        Layout and rendering of internationalized text
ii  libpangocairo-1.0-0:i386                   1.44.7-2ubuntu4                        i386         Layout and rendering of internationalized text
ii  libpangoft2-1.0-0:amd64                    1.44.7-2ubuntu4                        amd64        Layout and rendering of internationalized text
ii  libpangoft2-1.0-0:i386                     1.44.7-2ubuntu4                        i386         Layout and rendering of internationalized text

第一个解决方案

由于该错误仅影响一个软件,因此我认为降级系统上安装的库并不方便(第二种解决方案),这可能会影响其他软件。

因此,此解决方案包括将库(旧版本)复制到软件所在文件夹的根目录,在我的情况下,它是可移植的,并且我将其放在Downloads/Vectr.

我们已经看到了确切的依赖项,我们将手动下载它们(选择您的架构并下载 .deb):

正如我们之前看到的,我的架构是 amd64,但是,系统还安装了 i386 版本的库。由于此过程是手动的且可移植,因此我决定仅使用 amd64,并且它对我有用。但如果出现任何错误,请尝试同时使用两种架构。

打开 .deb 文件档案管理员,然后打开data.tar.xz文件,然后将这/./usr/lib/x86_64-linux-gnu/两个文件解压到软件的根文件夹(Downloads/Vectr)中。对每个下载的 .deb 文件重复此操作

您还可以使用阿尔来自 apit 包二进制工具提取 deb 文件的命令:

# Set $lib_name and $deb_file_path according to your arch, such as:
lib_name="libpangocairo-1.0"
deb_file_path="libpango-1.0-0_1.44.7-2ubuntu4_amd64.deb"
cd /home/myuser/DownloadsVects
mkdir $lib_name
cd $lib_name
ar x ~/Downloads/$deb_file_path
tar xf data.tar.xz
cp ls usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 ..
# Also repeat for each file

之后软件应该可以正常运行。如果你运行:

:~/Downloads/Vectr$ ldd vectr | grep pango

libpangocairo-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangocairo-1.0.so.0 (0x00007fc6b0ac8000)
libpango-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpango-1.0.so.0 (0x00007fc6b0931000)
libpangoft2-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangoft2-1.0.so.0 (0x00007fc6af084000)

您将看到依赖项的地址如何从/usr/lib/x86_64-linux-gnu/变为/home/myuser/Downloads/Vectr/

第二种解决方案

降级这些库(请记住,此方法可能会导致其他软件出现故障)。

变体一:(我无法尝试这个)

从源中拥有的​​存储库安装旧版本。

列出库的可用版本:

:~$ apt-cache madison libpango-1.0-0

libpango-1.0-0 | 1.44.7-2ubuntu4 | http://archive.ubuntu.com/ubuntu focal/main amd64 Packages

就我而言,我只有当前版本,并且它是导致冲突的版本。如果您获得其他版本,可以使用以下命令降级:

:~$ sudo apt install pkg-name=old-version

请记住,还必须安装两个库(libpangocairo-1.0-0 和 libpangoft2-1.0-0)。我不知道这些是否会作为依赖项自动安装,这个疑问对于 i386 的版本也有效。

变体二:(我确实尝试过这个)

对于没有以前版本的用户,您必须按照以下说明下载它 (.deb)第一个解决方案。为了避免重大错误,还必须下载 i386 的版本(请记住,在本例中我们有 UbuntuAMD64)。

下载文件后,在保存文件的文件夹中打开终端,然后可以使用以下命令降级:

:~$ sudo dpkg -i libpango*.deb

这可能会以错误结束,但最终软件运行良好,并且显然一切正常。未来的后果我还不知道。

撤消这次降级运行的sudo apt update话,sudo apt upgrade你肯定会需要一个sudo apt --fix-broken install

然后,如果您想让更改永久生效,并避免意外更新这些库,您可以使用以下命令:

:~$ sudo apt-mark hold package-name

这可以防止在系统升级期间自动安装、更新、升级或删除库。您可以使用以下命令撤消它:

:~$ sudo apt-mark unhold package-name

相关内容