Погуглив, я увидел, что эта ошибка возникает с другим программным обеспечением, использующим библиотеку Pango. Pango— это библиотека механизма компоновки текста, которая работает с механизмом формирования HarfBuzzдля отображения многоязычного текста.
Если программное обеспечение является инструментом командной строки или запускается из терминала, ошибка выглядит следующим образом:
:~$ sudo ah
(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)
Trace/breakpoint trap
:~$
Как исправить эту ошибку?
Заранее спасибо
Легко понять, что мы столкнулись с проблемой совместимости между версиями библиотек.
Давайте возьмем среду с этой проблемой, чтобы увидеть решение:
В данном случае при попытке его открыть ничего не происходит, он не открывается, но и ошибки не показывает, ошибка вылезает только при попытке запустить Вектр из терминала(./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