Вопрос или проблема
Если я пытаюсь запустить gnome-control-center
, я получаю:
$ gnome-control-center
gnome-control-center: ошибка поиска символа: /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37: символ не определен: FT_Get_Color_Glyph_Paint
Сложно сказать, что вызвало это. Панель управления работала ранее сегодня. Единственное, что я помню, это установка игры в префиксе Wine.
Ubuntu 22.04
Дополнительная информация: FT_Get_Color_Glyph_Paint
— это вызов freetype и
$ ldd /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 | grep free
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007d195c9b6000)
Вот мой процесс исправления этой проблемы.
Сначала нам нужно понять ошибку.
[имя программы]: ошибка поиска символа: [общий объект].so: символ не определен: [некоторый символ]
Этот тип ошибки означает, что в процессе выполнения [имя программы]
программа загрузила общий объект [общий объект]
. Какой-то код внутри этого общего объекта затем попытался загрузить символ [некоторый символ]
и не смог его найти. Ошибка не означает, что [имя программы]
пыталась найти [некоторый символ]
внутри [общий объект]
и не смогла его найти.
Итак, libwebkit2gtk
пытается найти какой-то символ с названием FT_Get_Color_Glyph_Paint
. Некоторое гугление покажет, что это вызов freetype. Хорошо, давайте выясним, в каком .so файле libwebkit2gtk
ищет freetype:
$ ldd /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 | grep free
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007d195c9b6000)
Эта команда покажет все .so файлы, из которых libwebkit2gtk-4.0.so.37
хочет загрузить библиотеки, а grep найдет freetype. По какой-то причине мой libwebkit2gtk хочет получить freetype из какого-то двоичного файла в /usr/local/
. В качестве эксперимента давайте попробуем удалить или переименовать этот файл:
sudo mv /usr/local/lib/libfreetype.so.6 /usr/local/lib/libfreetype.so.6.backup
А теперь снова запустим ldd
:
$ ldd /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 | grep freetype
libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007ce3098ee000)
Теперь он получает freetype из другого места, в /lib/
, что кажется лучше. И действительно, gnome-control-center
теперь работает.
Это не идеальное решение, потому что в идеале я бы хотел понять, откуда взялся двоичный файл в /usr/local
и придумать лучшее решение (на самом деле, в идеале я бы предпочел, чтобы моя система не ломалась случайным образом, когда какая-то независящая программа или действие помещает библиотеку в /usr/local/
, но это уже другая история…), но на данный момент это сойдет.
Ответ или решение
Решение проблемы с запуском GNOME Control Center из-за ошибки символа FT_Get_Color_Glyph_Paint
Если вы столкнулись с проблемой запуска gnome-control-center
и получили сообщение об ошибке, выглядящее следующим образом:
gnome-control-center: symbol lookup error: /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37: undefined symbol: FT_Get_Color_Glyph_Paint
это скорее всего связано с конфликтом или неправильной версией библиотеки FreeType, которая используется в системе. Эта статья предлагает детальное руководство по устранению этой ошибки, а также рекомендации для предотвращения будущих проблем.
Понимание проблемы
Сообщение об ошибке указывает на то, что при запуске gnome-control-center
была загружена библиотека libwebkit2gtk
, которая затем не смогла найти определённый символ (FT_Get_Color_Glyph_Paint
). Этот символ относится к библиотеке FreeType, использующейся для обработки шрифтов.
Чтобы диагностировать проблему, выполните команду:
ldd /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 | grep free
Результат этой команды указывает на то, что libwebkit2gtk
пытается получить доступ к библиотеке FreeType следующим образом:
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007d195c9b6000)
Это означает, что версия библиотеки FreeType, на которую ссылается libwebkit2gtk
, находится в /usr/local/
, и, скорее всего, эта версия нарушает совместимость.
Устранение неполадок
-
Изменение пути к библиотеке FreeType: Первый шаг в решении проблемы – перемещение или изменение имени библиотеки в
/usr/local/lib
:sudo mv /usr/local/lib/libfreetype.so.6 /usr/local/lib/libfreetype.so.6.backup
После выполнения этой команды проверьте, откуда теперь загружается FreeType, снова используя
ldd
:ldd /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 | grep free
Вы должны увидеть, что библиотека теперь загружается из
/lib/
, что является правильным расположением для системных библиотек. -
Проверка запуска
gnome-control-center
: После этих действий попробуйте снова запуститьgnome-control-center
:gnome-control-center
Если все было выполнено правильно, приложение должно успешно запуститься.
-
Исследование источника библиотеки в
/usr/local
: Например, если вы недавно устанавливали игру через Wine, возможно, она установила библиотеку в/usr/local
, что вызывает конфликт. Чтобы проверить, требуется ли эта версия библиотеки, удалите или замените её, как мы сделали выше, и проанализируйте, как это повлияло на работу других приложений.
Заключение
Хотя этот обходной путь позволяет устранить проблему с запуском gnome-control-center
, важно понимать, откуда пришла конфликтующая библиотека, и как предотвратить подобные ситуации в будущем. Главное, избегайте установки библиотек в /usr/local
, если у вас уже есть системные версии, чтобы не допустить конфликтов между различными версиями библиотек.
Для дальнейшего изучения рекомендуется ознакомиться с документацией по моделям управления зависимостями и системным библиотекам, что поможет поддерживать вашу систему в рабочем состоянии без неожиданных конфликтов.
Если у вас есть другие вопросы или требуется дополнительная помощь, не стесняйтесь обращаться за советом к сообществу или к специалистам в области ИТ.