GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Ubuntu – Errore Pango versione Harfbuzz troppo vecchia?

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

Ubuntu
  1. Aggiorna la versione del kernel sui server Ubuntu

  2. Versione Xpra su Ubuntu 16.04?

  3. Aggiornamento di Rstudio in Ubuntu 16.04?

  4. Come partizionare un vecchio Imac??

  5. Aggiorna Ghostscript su Ubuntu 14.04?

Come eseguire l'aggiornamento a Ubuntu 17.04 da una versione precedente

Come installare Git su Ubuntu 20.04

Come controllare la versione di Ubuntu

Come controllare la tua versione di Ubuntu

Come controllare la versione GCC in Ubuntu

Come trovare la versione di Ubuntu