如何在 libgfortran.so 更新后修复损坏的 R 包依赖关系

如何在 libgfortran.so 更新后修复损坏的 R 包依赖关系

[实际上,这应该适用于所有 Lx 发行版,并且“概念上”也适用于所有 Apple 和 M$ 操作系统。]

在您的系统上升级 R [base] 有时可能会破坏某些依赖项,具体取决于您已安装并通过调用使用的软件包: library("package_name")。最近,在例行滚动发布更新后,我遇到了这种情况。这是我收到的消息:

无法加载共享对象 /home/USER/R/x86_64-pc-linux-gnu-library/3.5/leaps/libs/leaps.so
libgfortran.so.4:无法打开共享对象文件:没有此文件或目录

软件包依赖安装错误

我在 SE、Github 和其他地方看到过不少帖子,其中有类似的报告,但没有解决方案(至少对我来说)。

  • 重新安装 R 基础确实有好处或坏处。
  • 另一个想到的方法是降级并删除最新的软件包以返回到以前的版本状态。对于 Arch Lx 等滚动版本来说,这并不令人满意且维护起来很复杂。

那么,当您需要在晚上 7 点“现在”让 R 开始工作时,如何解决这个问题?

答案1

1) $ find /usr/lib/ -name "libgfortran.*" 说服自己,仅仅弥补缺失的符号链接 libgfortran.so.4 -> libgfortran.so.5.0.0根本无济于事。
(符号链接中的目标版本信息“5.0.0”将根据安装的版本而有所不同。)

2)查出 确切地 哪些依赖项已损坏。这是您已安装软件包的功能。(将/3.x下面的路径替换为R base您使用的任何版本。)

$ ldd ~/R/x86_64-pc-linux-gnu-library/3.x/*/libs/*.so \
  | egrep '(so:$|not found)' > ~/R/x86_64-pc-linux-gnu-library/3.x/foobar

ldd打印共享对象依赖关系。任何行在foobar行之前,“未找到”显示指的是需要删除并重新安装的损坏的包。

3)将之前确定的损坏软件包的文件夹移动到您选择的备份文件夹中。您的 R 软件包通常~/R/x86_64-pc-linux-gnu-library/3.x/默认安装在 lx 上。(任何其他位置都必须由您在安装期间指定或在 R 配置文件中全局指定。)从 R 控制台重新安装已删除的软件包:
> install.packages(c("pkg_name_1","pkg_name_2",...), depend=T)
请注意,不(removing | moving)存在现有(损坏)软件包,继续重新安装它们不会修复任何问题。您需要将损坏软件包的文件夹移出其位置,以便 R 可以重建依赖项。

4)从 R 控制台加载感兴趣的 R 库并执行临时测试,然后删除 ~/R/x86_64-pc-linux-gnu-library/3.x/foobar

嗨嗨。

相关内容