R,在 Linux CentOS 7 上发布 "unable to load shared object cairo.so"

R, issue "unable to load shared object cairo.so" on Linux CentOS 7

我在 Linux CentOS 7 上将 R 与 ggplot2 和其他软件包一起使用了很长时间。 今天突然不行了

当我在脚本中调用 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

我多次尝试更新 cairo 包,但到目前为止没有任何效果。 我能做什么?

谢谢!

您的 cairo (/lib64/libcairo.so.2) 版本取决于一个名为 FT_Get_Var_Design_Coordinates 的函数。这个函数应该来自 FreeType。但是,您的 libfreetype.so 版本似乎较旧并且没有此符号。因此,要么您明确安装了旧版本,要么 "something" 附带了旧版本的 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 这样的路径是要检查的路径。

我找到了解决方案,我将与社区分享。

我正在使用 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
...

这个方法对我很有效;我希望它可能对某人有所帮助。