ale*_*lex 18 linux ubuntu kali-linux
谷歌搜索,我看到这个错误发生在使用 Pango 库的不同软件上。Pango是一个文本布局引擎库,它与 HarfBuzz 整形引擎一起工作以显示多语言文本。
如果该软件是命令行工具,或者是从终端启动,则错误如下所示:
:~$ sudo ah
(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)
Trace/breakpoint trap
:~$
Run Code Online (Sandbox Code Playgroud)
如何修复此错误?
提前致谢
小智 5
很容易意识到我们面临着库版本之间的兼容性问题。
我们拿一个有这个问题的环境来看看解决方案:
在这种情况下,当尝试打开它时,什么也没有发生,它没有打开,但也没有显示错误,只有当尝试从终端 ( ./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)
Run Code Online (Sandbox Code Playgroud)
这可以通过不同的方式完成,只需询问 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
Run Code Online (Sandbox Code Playgroud)
由于该错误仅影响一个软件,因此我认为降级系统上安装的库并不方便(第二种解决方案,这可能会影响其他软件。
因此,此解决方案包括将库(旧版本)复制到软件所在文件夹的根目录,在我的情况下,它是可移植的,并且我将其放在Downloads/Vectr.
我们已经看到了确切的依赖项,我们将手动下载它们(选择您的架构并下载 .deb):
正如我们之前看到的,我的架构是 amd64,但是,系统还安装了 i386 版本的库。由于此过程是手动的且可移植,因此我决定仅使用 amd64,并且它对我有用。但如果出现任何错误,请尝试同时使用两种架构。
使用Archive Manager打开 .deb ,然后打开data.tar.xz文件,然后转到/./usr/lib/x86_64-linux-gnu/软件根文件夹 ( Downloads/Vectr) 中并将这两个文件解压。对每个下载的 .deb 文件重复此操作。
您还可以使用apit package binutils命令中的ar来提取 deb 文件:
:~/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)
Run Code Online (Sandbox Code Playgroud)
之后软件应该可以正常运行。如果你运行:
:~/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)
Run Code Online (Sandbox Code Playgroud)
您将看到依赖项的地址如何从/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
Run Code Online (Sandbox Code Playgroud)
就我而言,我只有当前版本,并且它是导致冲突的版本。如果您获得其他版本,可以使用以下命令降级:
:~$ sudo apt install pkg-name=old-version
Run Code Online (Sandbox Code Playgroud)
请记住,还必须安装两个库(libpangocairo-1.0-0 和 libpangoft2-1.0-0)。我不知道这些是否会作为依赖项自动安装,这个疑问对于 i386 的版本也有效。
对于没有以前版本的用户,您必须按照第一个解决方案中的指示下载它 (.deb) 。为了避免重大错误,还必须下载 i386 的版本(请记住,在本例中我们有 Ubuntu amd64)。
下载文件后,在保存文件的文件夹中打开终端,然后可以使用以下命令降级:
:~$ sudo dpkg -i libpango*.deb
Run Code Online (Sandbox Code Playgroud)
这可能会以错误结束,但最终软件运行良好,并且显然一切正常。未来的后果我还不知道。
要撤消此降级运行sudo apt update,那么sudo apt upgrade您肯定需要一个sudo apt --fix-broken install.
然后,如果您想让更改永久生效,并避免意外更新这些库,您可以使用以下命令:
:~$ sudo apt-mark hold package-name
Run Code Online (Sandbox Code Playgroud)
这可以防止在系统升级期间自动安装、更新、升级或删除库。您可以使用以下命令撤消它:
:~$ sudo apt-mark unhold package-name
Run Code Online (Sandbox Code Playgroud)