R, проблема "не удается загрузить общий объект cairo.so" на Linux CentOS 7 - PullRequest
0 голосов
/ 21 марта 2020

Я давно использую R с ggplot2 и другими пакетами на Linux CentOS 7. Сегодня неожиданно он перестал работать.

Когда я вызываю функцию png() в моем скрипте, он генерирует следующие ошибки:

Warning messages:
1: In png(heatmap_file) :
  unable to load shared object '/usr/lib64/R/library/grDevices/libs//cairo.so':
  /lib64/libcairo.so.2: undefined symbol: FT_Get_Var_Design_Coordinates
2: In png(heatmap_file) : failed to load cairo DLL

Я пытался обновить Каир пакет много раз, но пока ничего не получалось. Что я могу сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Ваша версия cairo (/lib64/libcairo.so.2) зависит от функции с именем FT_Get_Var_Design_Coordinates. Эта функция должна исходить от FreeType. Однако ваша версия libfreetype.so кажется более старой и не имеет этого символа. Итак, либо вы явно установили более старую версию, либо «что-то» поставляется с более старой версией FreeType.

Я бы искал файлы с именем libfreetype.so и проверил, имеют ли они необходимый символ

Я нахожусь на тестировании Debian, и здесь я получаю (это означает, что моя версия FreeType имеет этот символ; вы не получите вывод, если символ недоступен):

$ nm -s -D /usr/lib/x86_64-linux-gnu/libfreetype.so | grep FT_Get_Var_Design_Coordinates                                                                           
000000000001d260 T FT_Get_Var_Design_Coordinates

Для вас, на основе на пути к libcairo.so, я бы ожидал, что путь типа /lib64/libfreetype.so будет проверять.

0 голосов
/ 23 марта 2020

Я нашел решение и собираюсь поделиться им с сообществом.

Я работаю над ноутбуком Dell Latitude 3540 с операционной системой Linux CentOS 7 (centos-release-7-3.1611. el7.centos.x86_64).

Я запустил sudo yum -y update и понял, что возникла проблема с дублированием пакета freetype, который был установлен дважды, и некоторых других пакетов, в которых возникали конфликты.

Затем я удалил старый пакет freetype и конфликтующие пакеты с помощью этой команды:

rpm -e freetype-2.4.11-12.el7.i686 --nodeps
rpm -e conflicting-package-1 --nodeps
rpm -e conflicting-package-2 --nodeps
...

Затем я обновил все пакеты, которые я удалил вручную:

sudo yum -y update freetype
sudo yum -y conflicting-package-1 freetype
sudo yum -y conflicting-package-2 freetype
...

This метод разработан для меня; Я надеюсь, что это может быть полезно для кого-то.

...