Google, viděl jsem, že k této chybě dochází u jiného softwaru, který používá knihovnu Pango. Pango je knihovna nástroje pro rozvržení textu, která pracuje s modulem pro tvarování HarfBuzz pro zobrazení vícejazyčného textu.
Pokud je software nástrojem příkazového řádku nebo je spuštěn z terminálu, chyba vypadá takto:
:~$ sudo ah
(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)
Trace/breakpoint trap
:~$
Jak tuto chybu opravit?
Předem děkuji
Přijatá odpověď:
Je snadné si uvědomit, že čelíme problému s kompatibilitou mezi verzemi knihoven.
Vezměme si prostředí s tímto problémem, abychom viděli řešení:
- OS:Ubuntu 20.04 (amd64)
- Software:Vectr 0.1.15 (vektorová grafika
Editor)
V tomto případě se při pokusu o otevření nic neděje, neotevře se, ale ani nevykazuje chybu, chyba se objeví pouze při pokusu o spuštění Vectr z terminálu (./vectr
).
Nejprve se podívejme na závislosti, které mohou chybu způsobovat:
:~/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)
To lze provést různými způsoby, stačí se zeptat Google.
Pokud chcete vidět podrobnosti o knihovnách, které jste nainstalovali, můžete použít následující příkaz. Všimněte si, že druhý sloupec označuje verzi:
:~/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
První řešení
Protože chyba postihuje pouze jeden software, nemyslím si, že je vhodné downgradovat knihovny, které jsou nainstalované v systému (druhé řešení ), což může ovlivnit další software.
Toto řešení tedy spočívá ve zkopírování knihoven (starších verzí) do kořenové složky, kde je software, v mém případě je přenosný a mám ho v Downloads/Vectr
.
Přesné závislosti jsme již viděli, stáhneme je ručně (vyberte si architekturu a stáhněte si .deb):
- libpango-1.0-0 (1.42.4-7)
- libpangocairo-1.0-0 (1.42.4-7)
- libpangoft2-1.0-0 (1.42.4-7)
Jak jsme viděli dříve, moje architektura je amd64, nicméně systém nainstaluje i verzi knihoven i386. Protože je tento postup ruční a přenosný, rozhodl jsem se použít pouze amd64 a fungovalo to pro mě. Ale v případě jakýchkoli chyb zkuste použít obě architektury společně.
Otevřete soubor .deb pomocí Správce archivu a otevřete data.tar.xz
a poté přejděte na /./usr/lib/x86_64-linux-gnu/
a extrahujte tyto dva soubory v kořenové složce softwaru (Downloads/Vectr
). Opakujte pro každý stažený soubor .deb .
Poté by měl software běžet normálně. A pokud spustíte:
:~/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)
Uvidíte, jak se změnila adresa závislostí z /usr/lib/x86_64-linux-gnu/
na /home/myuser/Downloads/Vectr/
.
Druhé řešení
Přejděte na nižší verzi těchto knihoven (nezapomeňte, že tato metoda může způsobit poruchu v jiném softwaru).
Související:Jak vytvořit stromový výstup pouze adresářů?Varianta jedna:(tu jsem nemohl vyzkoušet)
Nainstalujte starou verzi z repozitářů, které máte ve zdrojích.
Seznam dostupných verzí knihoven:
:~$ apt-cache madison libpango-1.0-0
libpango-1.0-0 | 1.44.7-2ubuntu4 | http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
V mém případě mám pouze aktuální verzi a je to ta, která způsobuje konflikt. Pokud získáte jiné verze, můžete přejít na nižší verzi pomocí následujícího příkazu:
:~$ sudo apt install pkg-name=old-version
Nezapomeňte, že je třeba nainstalovat další dvě knihovny (libpangocairo-1.0-0 a libpangoft2-1.0-0). Nevím, zda se tyto automaticky instalují jako závislosti, tato pochybnost platí i pro verze pro i386.
Varianta dvě:(tu jsem zkusil)
Pro ty, kteří nemají předchozí verze, si ji musíte stáhnout (.deb), jak je uvedeno v První řešení . A aby se předešlo velkým chybám, je třeba stáhnout i verze pro i386 (nezapomeňte, že v tomto příkladu máme Ubuntu amd64 ).
Po stažení souborů otevřete terminál ve složce, kam jste je uložili, a poté můžete přejít na nižší verzi pomocí následujícího příkazu:
:~$ sudo dpkg -i libpango*.deb
To může skončit chybami, ale nakonec software běží dobře a zdá se, že vše funguje dobře. Budoucí důsledky zatím neznám.
Chcete-li vrátit zpět tento downgrade spustí sudo apt update
a poté sudo apt upgrade
a určitě budete potřebovat sudo apt --fix-broken install
.
Pokud pak chcete, aby byla změna trvalá a abyste se vyhnuli náhodným aktualizacím těchto knihoven, můžete použít příkaz:
:~$ sudo apt-mark hold package-name
To zabrání automatické instalaci, aktualizaci, aktualizaci nebo odstranění knihoven během aktualizace systému. A můžete to vrátit příkazem:
:~$ sudo apt-mark unhold package-name