Pango-ERROR Версия Harfbuzz слишком старая

Погуглив, я увидел, что эта ошибка возникает с другим программным обеспечением, использующим библиотеку Pango. Pango— это библиотека механизма компоновки текста, которая работает с механизмом формирования HarfBuzzдля отображения многоязычного текста.

Если программное обеспечение является инструментом командной строки или запускается из терминала, ошибка выглядит следующим образом:

:~$ sudo ah

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

Trace/breakpoint trap
:~$

Как исправить эту ошибку?

Заранее спасибо

13
25.11.2020, 12:49
1 ответ

Легко понять, что мы столкнулись с проблемой совместимости между версиями библиотек.

Давайте возьмем среду с этой проблемой, чтобы увидеть решение:

  • ОС :Ubuntu 20.04 (amd64)
  • Программное обеспечение :Vectr 0.1.15 (Векторная графика Редактор)

В данном случае при попытке его открыть ничего не происходит, он не открывается, но и ошибки не показывает, ошибка вылезает только при попытке запустить Вектр из терминала(./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 .

Вы также можете использовать команду ar из пакета apit binutils для извлечения файла 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 тоже надо скачивать (помните, что в данном примере у нас Ubuntu amd64).

После загрузки файлов откройте терминал в папке, в которой вы их сохранили, затем вы можете перейти на более раннюю версию с помощью следующей команды:

:~$ 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
3
18.03.2021, 23:31

Теги

Похожие вопросы