Cercando su Google, ho visto che questo errore si verifica con diversi software che utilizzano la libreria Pango. Pango è una libreria del motore di layout del testo che funziona con il motore di modellatura HarfBuzz per la visualizzazione di testo multilingue.
Se il software è uno strumento a riga di comando o viene avviato da un terminale, l'errore è simile al seguente:
:~$ sudo ah
(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)
Trace/breakpoint trap
:~$
Come correggere questo errore?
Grazie in anticipo
Risposta accettata:
È facile rendersi conto che stiamo affrontando un problema di compatibilità tra le versioni delle librerie.
Prendiamo un ambiente con questo problema per vedere la soluzione:
- OS:Ubuntu 20.04 (amd64)
- Software:Vectr 0.1.15 (editor di grafica vettoriale
)
In questo caso quando si tenta di aprirlo, non succede nulla, non si apre, ma non mostra nemmeno un errore, l'errore esce solo quando si tenta di avviare Vectr da un terminale (./vectr
).
Per prima cosa, diamo un'occhiata alle dipendenze che potrebbero causare l'errore:
:~/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)
Questo può essere fatto in diversi modi, basta chiedere a Google.
Se vuoi vedere i dettagli delle librerie che hai installato, puoi usare il comando successivo. Nota che la seconda colonna indica la versione:
:~/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
Prima soluzione
Poiché l'errore riguarda solo un software, non credo sia conveniente eseguire il downgrade delle librerie installate sul sistema (seconda soluzione ), che potrebbero influire su altri software.
Quindi, questa soluzione consiste nel copiare le librerie (vecchie versioni) nella radice della cartella in cui si trova il software, nel mio caso è portatile e ce l'ho in Downloads/Vectr
.
Abbiamo già visto le dipendenze esatte, le scaricheremo manualmente (scegli la tua architettura e scarica il .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)
Come abbiamo visto in precedenza, la mia architettura è amd64, tuttavia il sistema installa anche la versione i386 delle librerie. Poiché questa procedura è manuale e portatile, ho deciso di utilizzare solo amd64 e ha funzionato per me. Ma in caso di errori, prova a utilizzare le due architetture insieme.
Apri il .deb con Gestione archivio e apri data.tar.xz
file, quindi vai su /./usr/lib/x86_64-linux-gnu/
ed estrai quei due file nella cartella principale del software (Downloads/Vectr
). Ripeti per ogni file .deb scaricato .
Dopodiché il software dovrebbe funzionare normalmente. E se corri:
:~/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)
Vedrai come è cambiato l'indirizzo delle dipendenze da /usr/lib/x86_64-linux-gnu/
a /home/myuser/Downloads/Vectr/
.
Seconda soluzione
Esegui il downgrade di queste librerie (ricorda, questo metodo può causare malfunzionamenti in altri software).
Correlati:come creare solo directory di output dell'albero?Variante:(non ho potuto provare questa)
Installa una vecchia versione dai repository che hai nei tuoi sorgenti.
Elenca le versioni disponibili delle librerie:
:~$ apt-cache madison libpango-1.0-0
libpango-1.0-0 | 1.44.7-2ubuntu4 | http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
Nel mio caso ho solo la versione corrente ed è quella che causa il conflitto. Se ottieni altre versioni, puoi eseguire il downgrade con il seguente comando:
:~$ sudo apt install pkg-name=old-version
Ricorda che ci sono altre due librerie che devono essere installate (libpangocairo-1.0-0 e libpangoft2-1.0-0). Non so se questi vengono installati automaticamente come dipendenze, questo dubbio vale anche per le versioni per i386.
Variante due:(ho provato questa)
Per chi non ha versioni precedenti, è necessario scaricarlo (.deb) come indicato nella Prima Soluzione . E per evitare grossi errori, è necessario scaricare anche le versioni per i386 (ricordiamo che in questo esempio abbiamo Ubuntu amd64 ).
Dopo aver scaricato i file, apri un terminale nella cartella in cui li hai salvati, quindi puoi eseguire il downgrade con il seguente comando:
:~$ sudo dpkg -i libpango*.deb
Questo potrebbe finire con errori, ma alla fine il software funziona correttamente e apparentemente tutto funziona correttamente. Le conseguenze future non le conosco ancora.
Per annullare questo downgrade esegue sudo apt update
, quindi sudo apt upgrade
e avrai sicuramente bisogno di un sudo apt --fix-broken install
.
Quindi, se vuoi rendere permanente la modifica ed evitare aggiornamenti accidentali di queste librerie, puoi utilizzare il comando:
:~$ sudo apt-mark hold package-name
Ciò impedisce che le librerie vengano installate, aggiornate, aggiornate o rimosse automaticamente durante l'aggiornamento del sistema. E puoi annullarlo con il comando:
:~$ sudo apt-mark unhold package-name